java - JPA 对于 GenerationType.IDENTITY 持久失败

标签 java jpa derby jboss6.x

我有一个旧应用程序,在 JBOss 5、JPA 和 Derby 中运行良好。我现在将其移植到JBoss 6,却发现系统无法插入实体,并出现错误消息:

列“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

拉吉

最佳答案

嗯,我还有事要做。基本上,当您使用 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>

关于java - JPA 对于 GenerationType.IDENTITY 持久失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355601/

相关文章:

java - 使用 Java nio 写入文件元数据的问题

java - 如何排除maven中循环弃用的依赖项而不完全杀死依赖项?

java - Singleton Bean 中可能存在的竞争条件

java - NetBeans 用来从数据库生成实体类的工具是什么?

java - 插入时如何批量插入取决于准备批量的数据

java - Derby 查询非常慢

java - 线程 "main"java.lang.NoClassDefFoundError : org/apache/ws/commons/serialize/DOMSerializer 中出现异常

java - 为什么唯一多重约束的 JPA 声明在 mySQL 中有效,但在 SQLite 中无效

java - JPA 1 个关系表,2 个独立子句,使用带有 @OneToMany 的公共(public)类

sql - 是否可以在FOREIGN KEY的子表中插入行?