2012-04-27 4 views
2

J'ai une ancienne application qui a bien fonctionné dans JBOss 5, JPA et Derby. Je porte maintenant à JBoss 6, seulement pour trouver que le système est incapable d'insérer l'entité avec le message d'erreur:La persistance JPA échoue pour GenerationType.IDENTITY

La colonne 'ID' ne peut pas accepter une valeur NULL.

Où, ID est une colonne d'identité:

@Entity 
public class Customer { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    int id; 
    ... 
} 

J'ai vérifié le schéma généré et il semble bon:

CREATE TABLE "APP"."CUSTOMER" (
    "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), 
    "EMAIL" VARCHAR(255), 
    "NAME" VARCHAR(255), 
    "PHONE" VARCHAR(255)); 

Vous pouvez consulter le code de l'application dans le lien ci-dessous. Toute aide est appréciée.

https://docs.google.com/open?id=0B_lXBrNTL1s-R3NHb2hYZlJ1Znc

Raj

Répondre

1

Eh bien, j'ai des choses à travailler. Fondamentalement, lorsque vous utilisez JPA pour générer le schéma dans Derby, il crée très bien les tables, mais a ensuite des problèmes pour insérer des lignes avec une colonne d'identité. La solution n'était pas de générer un schéma à partir de JPA. J'ai créé manuellement le schéma et mis en commentaire l'option de génération de schéma.

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
<persistence-unit name="ContactsPU" transaction-type="JTA"> 
    <jta-data-source>java:DerbyDS</jta-data-source> 
    <class>com.webage.contacts.Customer</class> 
    <!-- 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
    </properties> 
    --> 
</persistence-unit> 
</persistence> 
1

Vous pouvez résoudre ce problème sans avoir à créer vous-même le schéma. Il suffit de passer de GenerationType.IDENTITY à GenerationType.TABLE.

@GeneratedValue (stratégie = GenerationType.TABLE)

je le même problème dans le derby et cette résolu.

Questions connexes