2010-06-01 77 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; 
}