1

我在使用 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 的 Facade。

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 "model_layer.Testobjekt@3209fa8f" 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 策略?

谢谢,希望

4

1 回答 1

2

如何使用 OpenJPA 处理自动化 ID 策略?

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

@Id 
@GeneratedValue
@Column(name = "IDTESTOBJEKT", unique = true, nullable = false)
public Integer getIdtestobjekt() {
    return this.idtestobjekt;
}
于 2010-06-01T15:43:41.017 回答