在 JPA 持久性单元中定义一个名为的重复生成器是否可以?
Is it OK to have a duplicate generator named defined in the JPA persistence unit?
我的情况描述如下:
eclipse Duplicate generator named "ID_GENERATOR" defined in this persistence unit
但是我的问题不同,选择的答案没有解决它:
"多个@SequenceGenerator 具有相同名称是否有效,即使它用于此目的Hibernate : How override an attribute from mapped super class?"
如果无效,是否有替代方案?
非常感谢您的回答。
我认为这是有效的,因为归根结底,这就是 hibernate 将实体映射到序列的方式,当它将实体持久保存在数据库中时,该序列将生成 ID。例如,Oracle 不关心哪些表使用哪个序列,因为序列本身是一个独立的实体。 IMO 此警告(或错误)更有意义,具体取决于您使用的 DBMS。 IMO,我只是在 eclipse 中禁用错误警告。
根据 JPA 2.1 规范的 11.1.48 SequenceGenerator Annotation
部分:
The scope of the generator
name is global to the persistence unit (across all generator types).
所以你不能有重复的生成器。
如果您尝试添加以下两个实体:
@Entity(name = "Post")
public static class Post {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pooled")
@GenericGenerator(
name = "pooled",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "sequence"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "5"),
}
)
private Long id;
}
@Entity(name = "Announcement")
public static class Announcement {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pooled")
@GenericGenerator(
name = "pooled",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "sequence"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "10"),
}
)
private Long id;
}
Hibernate 将生成以下错误消息:
Multiple references to database sequence [sequence] were encountered
attempting to set conflicting values for 'increment size'. Found [10]
and [5]
这是因为标识符生成器是全局的,这两个序列配置会发生冲突。
我的情况描述如下:
eclipse Duplicate generator named "ID_GENERATOR" defined in this persistence unit
但是我的问题不同,选择的答案没有解决它:
"多个@SequenceGenerator 具有相同名称是否有效,即使它用于此目的Hibernate : How override an attribute from mapped super class?"
如果无效,是否有替代方案?
非常感谢您的回答。
我认为这是有效的,因为归根结底,这就是 hibernate 将实体映射到序列的方式,当它将实体持久保存在数据库中时,该序列将生成 ID。例如,Oracle 不关心哪些表使用哪个序列,因为序列本身是一个独立的实体。 IMO 此警告(或错误)更有意义,具体取决于您使用的 DBMS。 IMO,我只是在 eclipse 中禁用错误警告。
根据 JPA 2.1 规范的 11.1.48 SequenceGenerator Annotation
部分:
The scope of the generator name is global to the persistence unit (across all generator types).
所以你不能有重复的生成器。
如果您尝试添加以下两个实体:
@Entity(name = "Post")
public static class Post {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pooled")
@GenericGenerator(
name = "pooled",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "sequence"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "5"),
}
)
private Long id;
}
@Entity(name = "Announcement")
public static class Announcement {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pooled")
@GenericGenerator(
name = "pooled",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "sequence"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "10"),
}
)
private Long id;
}
Hibernate 将生成以下错误消息:
Multiple references to database sequence [sequence] were encountered attempting to set conflicting values for 'increment size'. Found [10] and [5]
这是因为标识符生成器是全局的,这两个序列配置会发生冲突。