2012-04-27 3 views
2

JBOss 5, JPA 및 Derby에서 제대로 작동하는 이전 응용 프로그램이 있습니다. 이제 JBoss 6에 시스템을 포팅하여 오류 메시지와 함께 엔티티를 삽입 할 수 없습니다.JPA 지속성이 GenerationType.IDENTITY에 대해 실패합니다.

열 'ID'는 NULL 값을 허용 할 수 없습니다.

는 경우, ID는 ID 열 :

@Entity 
public class Customer { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    int id; 
    ... 
} 

내가 생성 된 스키마를 확인하고는 좋아 보인다 :

CREATE TABLE "APP"."CUSTOMER" (
    "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), 
    "EMAIL" VARCHAR(255), 
    "NAME" VARCHAR(255), 
    "PHONE" VARCHAR(255)); 

당신은 아래 링크에서 응용 프로그램의 코드를 볼 수 있습니다. 어떤 도움을 주셔서 감사합니다.

https://docs.google.com/open?id=0B_lXBrNTL1s-R3NHb2hYZlJ1Znc

주권

답변

1

글쎄, 내가 작업 할 일이있어. 기본적으로, JPA를 사용하여 Derby에서 스키마를 생성 할 때 테이블을 잘 작성하지만 식별 컬럼이있는 행을 삽입하는 데 문제가 있습니다. 해결책은 JPA에서 스키마를 생성하지 않는 것이 었습니다. 수동으로 스키마를 생성하고 스키마 생성 옵션을 주석 처리했습니다.

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
<persistence-unit name="ContactsPU" transaction-type="JTA"> 
    <jta-data-source>java:DerbyDS</jta-data-source> 
    <class>com.webage.contacts.Customer</class> 
    <!-- 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
    </properties> 
    --> 
</persistence-unit> 
</persistence> 
1

직접 해결할 수 있습니다. GenerationType.IDENTITY에서 GenerationType.TABLE로 변경하십시오.

@GeneratedValue (전략 = GenerationType.TABLE)

I 더비에서 동일한 문제가되고이 그것을 해결.

관련 문제