@GeneratedValue和@SequenceGenerator是JPA标准注解,GeneratedValue用来定义主键生成策略,SequenceGenerator用来定义一个生成主键的序列;它们要联合使用才有效。
详情见文章 https://jingyan.baidu.com/article/c910274bfbb21ecd361d2da9.html
我使用过的实际例子:
1.因为用到的类很多,将ID抽象出来,声明一个抽象类,先定义主键生成策略@GeneratedValue,同时确定主键生成器的名字generator="instance_sequence"。(一般应该是先定义主键生成器再定义主键生成策略)
public abstract class OracleEntity
{
/** 公共id */
protected Long id;
/**
* @return the id
*/
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="instance_sequence")
public Long getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(Long id) {
this.id = id;
}
}
2. 声明要使用的实体类,为该实体类声明主键生成器,定义该主键生成器的序列名 sequenceName = "seq_ecom_istme"
@Entity
@org.hibernate.annotations.Entity(dynamicInsert = true)
@Table(name = "ecom_istme")
@SequenceGenerator(name = "instance_sequence", sequenceName = "seq_ecom_istme", allocationSize = 1)
public class EcomIstmentFeeRuleEntity extends
OracleEntity {
3. 前台页面通过框架取出EcomIstmentFeeRuleEntity后,EL 表达式可直接取${id}