oracle上的Hibernate序列,@ GeneratedValue(strategy = GenerationType.AUTO)
我使用@GeneratedValue(strategy = GenerationType.AUTO)来生成我的实体上的ID。
我现在不知道它是如何工作的,但在我的子表上,生成ID值,它遵循父序列。
//parent table @Entity @Table (name = "parent") public class Parent { @Id @GeneratedValue (strategy = GenerationType.AUTO) @Column (name = "id") private long id; @OneToMany (cascade = {CascadeType.ALL}, fetch = FetchType.LAZY) @JoinColumn (name = "parentId") @ForeignKey (name = "FKparent") private List child; } //child table @Entity @Table (name = "child") public class Child { @Id @GeneratedValue (strategy = GenerationType.AUTO) @Column (name = "id") private long id; }
父项上插入的ID值会更新序列。 在child上插入的ID值更新序列。 在下一个父项插入中,序列…使用由子插入更新的值…
这个Annotations,不是创建两个序列,只有一个。 这是正确/预期的吗?
我只使用entityManager.persist(parent);
将我的实体插入我的DAO服务entityManager.persist(parent);
这些注释不会创建两个序列,只有一个。 这是正确/预期的吗?
这是预期的行为。 使用@GeneratedValue(strategy = GenerationType.AUTO)
,JPA提供程序将为特定数据库选择适当的策略。 在Oracle的情况下,这将是SEQUENCE,因为你没有指定任何东西,Hibernate将使用一个名为hibernate_sequence
全局序列。
它是否正确? 好吧,我不知道,这取决于你的需求。 以防万一,Oracle序列的默认最大值为1E + 27或1,000,000,000,000,000,000,000,000,000,000。 这对很多人来说已经足够了。
现在,可以使用GenerationType.AUTO
并在数据库使用序列时仍然控制序列的名称:
@Id @GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen") @SequenceGenerator(name="my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ") private Long id;
是的,这是正确和预期的。
您可以为每个表创建单独的序列,但恕我直言,这只是额外的代码,没有实际的好处。
@Entity @Table(name = "table_seq") @SequenceGenerator(name= "NAME_SEQUENCE", sequenceName = "SEQ_ID", initialValue=1, allocationSize = 1) public class SeqEntity implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="NAME_SEQUENCE") private Long id; }
- 如何在运行时在Hibernate中创建数据库?
- 获取org.hibernate.hql.ast.QuerySyntaxException虽然它工作正常的SQL服务器?
- Hibernate和NonUniqueObjectException
- Hibernate:如何使用Criteria Query从复合键获取记录
- org.hibernate.HibernateException:找不到/hibernate.cfg.xml
- Postgresql日期类型和java SimpleDateFormat
- 如何使用Struts2和hibernate维护会话?
- 如何在spring MVC web应用程序中确认电子邮件addrees
- 如何使用hibernate在spring boot中实现分页