2012-04-27 103 views
2

我有一箇舊的應用程序,在JBOss 5,JPA和Derby中工作正常。我現在將它移植到JBoss 6上,只是發現系統無法插入帶有錯誤信息的實體:JPA持續失敗GenerationType.IDENTITY

列'ID'不能接受NULL值。

其中,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)

我具有德比同樣的問題,這解決了它。