Jav*_*cky 7 java orm hibernate jpa oracle10g
我有一些代码:
@Id
@SequenceGenerator(name = "SOMETHING_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SOMETHING_SEQ")
@Column(name = "SOMETHING", nullable = false)
private Long id;
Run Code Online (Sandbox Code Playgroud)
hibernate如何提供我的身份?
我在我的数据库中看到一个名为'hibernate_sequence'的序列,没有其他hibernate'特殊表'.
Ade*_*ari 10
实际上,这里SOMETHING_SEQ是你在hibernate配置中配置的序列的名称.并且hibernate_sequence是数据库中的序列名称.在配置中,它看起来像下面,
<sequence-generator name="SOMETHING_SEQ"
sequence-name="hibernate_sequence"
allocation-size="<any_number_value>"/>
Run Code Online (Sandbox Code Playgroud)
您可以使用注释完全跳过此配置.然后你的@SequenceGenerator注释需要提供更多的参数.以下是示例.
@SequenceGenerator(name="SOMETHING_SEQ", sequenceName="hibernate_sequence", allocationSize=10)
Run Code Online (Sandbox Code Playgroud)
例如,多个实体类可以执行类似下面的操作,
@Entity
public class Entity1 {
@Id
@SequenceGenerator(name = "entity1Seq", sequenceName="ENTITY1_SEQ", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entity1Seq")
@Column(name = "ID", nullable = false)
private Long id;
...
...
}
@Entity
public class Entity2 {
@Id
@SequenceGenerator(name = "entity2Seq", sequenceName="ENTITY2_SEQ", allocationSize=10)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entity2Seq")
@Column(name = "ID", nullable = false)
private Long id;
...
...
}
Run Code Online (Sandbox Code Playgroud)
hibernate 如何提供我的 ID?
好吧,您明确告诉 JPA 引擎@GeneratedValue使用SEQUENCE指示应使用数据库序列生成标识符的类型策略自动生成标识符(使用注释)。如果您想知道,序列是可用于生成唯一整数的数据库特定对象(例如 Oracle)。
我在我的数据库中看到一个名为“hibernate_sequence”的序列
您没有使用sequenceNameannotation 元素@SequenceGenerator来指定要使用的数据库序列对象的名称,因此 Hibernate 在模式生成期间创建了一个默认序列对象(默认为hibernate_sequence)。要指定序列,请执行以下操作:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "my_entity_seq_gen")
@SequenceGenerator(name = "my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ")
private Long id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22989 次 |
| 最近记录: |