2010-06-01 80 views
1

我在使用OpenJPA和HSQLdb处理数据库表的ID时遇到问题。我创建了一个抽象类,我处理的注释和东西重新映射到数据库:OpenJPA HSQLdb - 如何处理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; 
    } 

这是作为一个门面用来创建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()); 

然而,我设置了...... 1,没有......我得到错误。 像:

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

我想ORM层来处理ID的东西,而困扰着我。我对Hibernate的经验是,处理这些东西相当好......但OpenJPA在这里似乎很麻烦。我假设我的注释是错误的或某事,但我无法跟踪这个多层次的问题。

我在persistence.xml配置OpenJPA的:

<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> 

如何处理与OpenJPA的自动化ID策略?

感谢, wishi

回答

2

如何处理与OpenJPA的自动化ID策略?

使用@GeneratedValue注释(我建议使用默认GenerationType.AUTO策略,表明,持久性提供应该选择适当的战略,为特定的数据库):

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