- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个使用 JPA 的应用程序(带有 eclipselink)。该应用程序是在后台使用 Derby 数据库开发的。这些表是由 JPA 本身生成的。这是其中一个实体的简单示例:
public class MyEntity implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(nullable=false)
private String someString;
}
然后 JPA 创建了另一个表 SEQUENCE
来生成 ID。我们现在想切换到 PostgreSQL,而不是表 SEQUENCE
我们想在 PostgreSQL 中使用真正的序列。这是我们用来创建表的 DDL:
CREATE TABLE MYENTITY (
ID serial PRIMARY KEY NOT NULL,
SOMESTRING varchar(255) NOT NULL
)
但 JPA 仍然希望使用 SEQUENCE
表(该表不存在):
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse. persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: relation "sequence" does not exist
Position: 8
Error Code: 0
Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
bind => [2 parameters bound]
Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? ")
我知道我可以将生成策略更改为 SEQUENCE
,但我想让代码可移植。 GenerationType.SEQUENCE
不应与不支持序列的数据库一起使用。我希望 AUTO
会在 PostgreSQL 上使用一个序列。为什么不呢?我还需要做其他事情吗?
请注意,JPA 似乎在问题 Generated Value in Postgres 中自动使用了一个序列.
最佳答案
如果您希望“在数据存储中”分配 id(即通过自动生成或 SERIAL),您应该使用 IDENTITY
。
同样,如果您想使用数据存储 SEQUENCE,则选择 SEQUENCE
。
AUTO
表示将其留给 JPA 实现来决定,它可能会决定您希望的其他内容。
关于java - 为什么 GenerationType.AUTO 不在 PostgreSQL 上使用序列号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28393322/
目前,我们使用MySQL作为数据库,并且我们使用 @Generate Value(strategy = GenerationType.IDENTITY) 在某些情况下它工作得很好,我们需要将数据库迁移
目前,我们使用 MySQL 作为数据库,我们使用 @Generated Value(strategy = GenerationType.IDENTITY) 在我们需要将数据库迁移到 Oracle 的某
我有类似的问题 this SO question .但是我的应用程序正在 MySQL 上运行,并且有工作数据。 使用填充有数据的现有数据库重构应用程序的最佳做法是什么? 最佳答案 TABLE_PER_
我正在研究一个要求,其中代码应支持 Oracle 和 MySQL 数据库。我们正在使用 hibernate 并尝试使用框架功能来实现相同的目标。对于 Identity 列,我们使用 @Generate
我的应用程序使用 DB2。创建数据库后我运行一些插入脚本。该插入脚本会在表中生成记录,并在插入脚本中给出 id。 假设 abc 表插入脚本创建一条 id = 3 的记录。由于 id 设置为在 hibe
我有一个具有以下结构的部门表 Field Type Null Key Default Extra id int(11)
我正在从事一个项目,我需要存储一些数据(当然还有其他数据)。生产数据库将是MySQL,但对于我的测试,我使用 HyperSQL (又名 HSQLDB)。 我的所有@Enitity类都有相应的@Id字段
我有一个网络表单,用户可以在其中插入数据。然后还有存储在数据库中。但我在数据库记录中遇到了问题。我使用 spring 3、jpa、eclipselink 和 mysql。在实体中生成@Id。当我使用策
我有一个表,其中包含一个简单的 int id 列,在 SQL Server 中标识自动递增。 实体的 Id 用 @Id 和 @GeneratedValue 注释 @Id @GeneratedValue
Hibernate documentations (5.1.2.2. Identifier generator)州 AUTO: selects IDENTITY, SEQUENCE or TABLE
这是我的实体文件:- @Entity @Table(name = "tbl_article_function_instruction_status") @XmlRootElement public c
那么自动生成函数“@GenerateValue(strategy = GenerationType.AUTO)”到底是如何工作的呢? 我是 Hibernate 的新手,并且继承了一个广泛使用的项目。
我正在尝试将对象持久保存到数据库中。不断收到“列 ID 无法接受空值错误”。我的对象如下所示: @Entity public class TestTable { @Id @Ge
我有一个 ID 配置为的 hibernate 实体 @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; 新元素的创建在
我在同一个项目中有几个类,其中 id 始终是自动生成的。然而,在这种特定情况下,我的 id 值恰好始终为空。我真的很想知道出了什么问题,因为经过一些更改后它停止工作。与其他类相比,代码似乎是相同的。
由于 Spring Boot 2 使用 Hibernate 5,因此我的 MySQL 5.7 数据库的 @GenerateValue 默认策略 GenerationType.AUTO 会导致模拟 Ge
我的实体类: import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Ge
似乎我坚持的一切,它一直在 id 中输入 401,导致这个错误。有什么帮助吗? 异常 Exception [EclipseLink-4002] (Eclipse Persistence Service
我有一个在 JBOss 5、JPA 和 Derby 中运行良好的旧应用程序。我现在将它移植到 JBoss 6,却发现系统无法插入带有错误消息的实体: “ID”列不能接受 NULL 值。 其中,ID为标
我使用 Spring/Hibernate Dao 将我的对象保存在数据库中。现在我必须备份应用程序中的所有数据库。现在,当我尝试读回备份时,我的应用程序崩溃了。现在我发现了这个崩溃的问题。它是 Hib
我是一名优秀的程序员,十分优秀!