2010-06-01 1 views
1

У меня возникли проблемы с обработкой идентификаторов таблиц данных в базе данных с использованием OpenJPA и HSQLdb. Я создал абстрактный класс, где я обрабатывать аннотации и прочее переназначить в БД:OpenJPA HSQLdb - как обращаться с идентификаторами

// 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 кажется здесь громоздким. Я предполагаю, что мои аннотации ошибочны или что-то в этом роде, но у меня возникают проблемы с отслеживанием этой многоуровневой проблемы.

Я настроил OpenJPA в 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> 

Как обрабатывать автоматизированную стратегию ID с OpenJPA?

Спасибо, wishi

ответ

2

Как обрабатывать автоматизированную стратегию ID с OpenJPA?

Используйте @GeneratedValue аннотацию (и я предлагаю использовать GenerationType.AUTO стратегию по умолчанию, который указывает, что поставщик живучесть должен выбрать соответствующую стратегию для конкретной базы данных):

@Id 
@GeneratedValue 
@Column(name = "IDTESTOBJEKT", unique = true, nullable = false) 
public Integer getIdtestobjekt() { 
    return this.idtestobjekt; 
} 
Смежные вопросы