代码之家  ›  专栏  ›  技术社区  ›  wishi

openjpa hsqldb-如何处理ID

  •  1
  • wishi  · 技术社区  · 15 年前

    我在使用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 "model_layer.Testobjekt@3209fa8f" can not be set to "null" value.
    

    我希望ORM层能够在不打扰我的情况下处理这些ID信息。我在冬眠方面的经验是处理得很好…但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策略?

    谢谢, 怀希

    1 回复  |  直到 14 年前
        1
  •  2
  •   Pascal Thivent    15 年前

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

    使用 @GeneratedValue 注释(我建议使用默认值 GenerationType.AUTO 策略 指示持久性提供程序应为特定数据库选择适当的策略 ):

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