2010-06-01 5 views
1

J'ai des difficultés à gérer les ID de mes tables de bases de données en utilisant OpenJPA et HSQLdb. J'ai créé une classe abstraite où je manipule des annotations et des choses à remapper dans le DB:OpenJPA HSQLdb - comment gérer les ID

// Property accessors 
    @Id 
    @Column(name = "IDTESTOBJEKT", unique = true, nullable = false) 
    public Integer getIdtestobjekt() { 
     return this.idtestobjekt; 
    } 

    public void setIdtestobjekt(Integer idtestobjekt) { 
     this.idtestobjekt = idtestobjekt; 
    } 

Il est comme une façade utilisé pour créer Testobjekts.

Testobjekt test_obj = new Testobjekt(); 
test_obj.setEigentuemerin("helge"); 
// test_obj.setIdtestobjekt(1); 

EntityManagerHelper.beginTransaction(); 
TestobjektDAO test_dao = new TestobjektDAO(); 
test_dao.save(test_obj); 
EntityManagerHelper.commit(); 

List<Testobjekt> foo; 

foo = test_dao.findByEigentuemerin("helge"); 

Testobjekt from_db = foo.get(0); 
System.out.println(from_db.getEigentuemerin()); 

Cependant ce que je mets ... 1, rien ... J'obtiens des erreurs. Comme :

Field "model_layer.AbstractTestobjekt.idtestobjekt" of "[email protected]" can not be set to "null" value. 

Je veux la couche ORM pour gérer ce genre de choses ID sans me déranger. Mon expérience avec Hibernate, c'est que ça fonctionne très bien ... mais OpenJPA semble être encombrant ici. Je suppose que mes annotations sont fausses ou quelque chose, mais j'ai du mal à suivre ce problème multi-couches.

configuré à OpenJPA dans le persistence.xml:

<persistence-unit name="HSQLdb_mvn_openJPA_autoTablesPU" 
     transaction-type="RESOURCE_LOCAL"> 
     <provider> 
      org.apache.openjpa.persistence.PersistenceProviderImpl 
     </provider> 
     <class>model_layer.Testobjekt</class> 
     <class>model_layer.AbstractTestobjekt</class> 
     <properties> 
      <property name="openjpa.ConnectionDriverName" 
       value="org.hsqldb.jdbc.JDBCDriver" /> 
      <property name="openjpa.ConnectionURL" 
       value="jdbc:hsqldb:hsql://localhost:9001/mydb" /> 
      <property name="openjpa.ConnectionUserName" value="SA" /> 
      <property name="openjpa.jdbc.SynchronizeMappings" 
       value="buildSchema(ForeignKeys=true)" /> 
     </properties> 
    </persistence-unit> 

Comment puis-je gérer une stratégie automatisée d'identité avec OpenJPA?

Merci, Wishi

Répondre

2

Comment puis-je gérer une stratégie d'identification automatisée avec OpenJPA?

Utilisez l'annotation @GeneratedValue (et je suggère d'utiliser la stratégie par défaut GenerationType.AUTO qui indique que le fournisseur de persistance doit choisir une stratégie appropriée pour la base de données particulière):

@Id 
@GeneratedValue 
@Column(name = "IDTESTOBJEKT", unique = true, nullable = false) 
public Integer getIdtestobjekt() { 
    return this.idtestobjekt; 
}