- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个带有@Id 和@TableGenerator 的“狗”实体
...
@TableGenerator(table = "seq", name = "dog_gen", pkColumnName = "seq_name", valueColumnName="seq_val")
@Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "dog_gen")
private Long id;
...
有没有办法在其他实体中重用相同的表生成器 (dog_gen)?我想在两个独立的实体中保持相同的 id 序列,比如
狗=1,狗=2,狗=3,猫=4,猫=5,狗=6等等……
两个实体不共享一个公共(public)父类(super class)来实现某种带有 id 属性的继承。
如果我在我的 cat 实体上添加 @GeneratedValue( generator="dog_gen") ,省略 @TableGenerator 声明会抛出一个异常,指出它在启动上下文时找不到生成器。
Caused by: org.hibernate.AnnotationException: Unknown Id.generator: dog_gen
at org.hibernate.cfg.BinderHelper.makeIdGenerator(BinderHelper.java:413)
at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1795)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1229)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:733)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:498)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:277)
最佳答案
确实,这不是我在阅读@TableGenerator
的 javadoc 后所期望的:
This annotation defines a primary key generator that may be referenced by name when a generator element is specified for the
GeneratedValue
annotation. A table generator may be specified on the entity class or on the primary key field or property. The scope of the generator name is global to the persistence unit (across all generator types).
也许我没有正确解释事情(JPA 规范的第 9.1.38 节没有告诉我们更多信息)但我期望能够从 @GeneratedValue 中的另一个实体引用生成器名称
。
无论如何,以下似乎有效。在 Dog
实体中:
@TableGenerator(table = "myseq", name = "dog_gen", pkColumnName = "seq_name",
valueColumnName = "seq_val", pkColumnValue = "Dog", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "dog_gen")
private Long id;
在 Cat
中,也是一样的:
@TableGenerator(table = "myseq", name = "dog_gen", pkColumnName = "seq_name",
valueColumnName = "seq_val", pkColumnValue = "Dog", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "dog_gen")
private Long id;
关于java - JPA @TableGenerator 在多个实体之间共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2741402/
我已经成功地将 @TableGenerator 与 EclipseLink 结合使用: @Id @TableGenerator(name = "ID_GEN", table = "se
我将尝试使用表生成器生成主键。但是当我在我的表中插入 6 条记录时,primaryKey 表只显示一个值。这是下面的代码 我的实体类 package com.generatorvaluetest.do
你能告诉我什么时候使用它吗?为什么我要创建一个新表只是为了保留主键,而现在大多数 DBMS 都支持自增并且你可以轻松调整它? 最佳答案 TableGenerator 的主要优点是可移植性,这是保证适用
我有一个表,该表具有使用表生成器生成的主键: @TableGenerator(名称 =“resourceIdGenerator”,表 =“SEQUENCE”,pkColumnName =“NAME”,
我有下面的实体,它使用 TABLE 策略来生成 id,并且工作得很好。 @Entity @Table(name = "Test_Table") public class SomeEntity impl
我有一个带有@Id 和@TableGenerator 的“狗”实体 ... @TableGenerator(table = "seq", name = "dog_gen", pkColumnName
将依赖项从 Spring 4.1.6.RELEASE 更新到 5.1.4.RELEASE 并将 Hibernate 4.3.9.Final 更新到 5.4.1.Final 后,我的一些测试用例开始失败
@TableGenerator 技术生成主键有什么好处?为什么我们使用这种技术以及如何使用用于存储生成器的序列名称和值的第三个表来获取数据? 最佳答案 来自链接。 http://en.wikibook
我在我的项目中使用TableGenerator,下面是相同的代码片段。 @GeneratedValue(strategy = GenerationType.TABLE, generator =
在尝试在表中保存新行时,我收到重复的 id 错误并且无法保留数据。它位于我们的舞台环境中,因此我目前无法访问日志,尽管我正在尝试暂时获取它以解决此问题。到目前为止我只有基本的错误消息: Duplica
我正在尝试使用 hibernate JPA 到 Tomcat 中开发后端应用程序。从现在开始,它在使用 JPA 功能的测试中运行良好,并且没有 JPA 服务的第一个版本现在正在运行(文件上传、下载等)
我有以下实体: @Entity @Table(name = "sales", schema = "cust_tables") @Multitenant(MultitenantType.TABLE_PE
我希望我的数据库中所有生成的主键都是负整数。 我定义了一个 TableGenerator: 我假设这会从 -1000000 开始生成第一个 key 并将每个 ID 递增 1。因此下一个 ID 将是
我有一个 JPA 实体,其 TableGenerator 的 AllocationSize=25。如果我手动更新 TableGenerator 表并为其下一个 ID 起始范围指定一个新值,则在当前范围
我有一个具有以下主键生成策略的实体类 @Id @Column(name = "id", nullable = false) @TableGenerator(name = "USERGENERATOR"
这是 JPA 实体架构的摘录 @Entity @Table(name="customer") public class Customer implements Serializ
我有一个基于 Spring 的应用程序,它使用 JPA 2.1 作为持久层。我使用 @TableGenerator 和 @GenerateValue 注释来处理主键 ID 生成。 这些是注释: @Ta
我需要连接到供应商数据库并插入客户数据。用于生成新客户 ID 的序列表存储最后使用的 ID(不是下一个可用的)。我在 jpa 或 hibernate 文档中找不到任何指示告诉 hibernate 将
我在 Spring Boot 1.4.0.RELEASE 的应用程序中使用 hibernate 。 索引的实体看起来类似于: @Entity(name = "SearchableTariffItem"
我们从 Hibernate 4 迁移到 5,一个主要问题是新的生成器,它生成表行的 ID。我们的旧生成器都是基于表的,比如 @TableGenerator(name = TABLE_NAME + "_
我是一名优秀的程序员,十分优秀!