struts2 spring3 mybatis3 用了很久,回过头来用hibernate,突然发现annation下的oracle序列使用很有意识
@Entity
@Table(name="sys_users")
@SequenceGenerator(name="seqUsers",sequenceName="seq_users")
public class SysUsers {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seqUsers")
@Column(name="user_id")
private Long userId;
@Column(name="user_name")
private String userName;
@Column(name="user_password")
private String userPwd;
@Transient
private String userStatus;
@Column(name="time_insert")
private Date timeInsert;
如上,加入这段之后,他会用hibernate自己的序列,而放弃oracle生成的序列seq_users.
而令人困惑的是,在写入该对象时,打印的hql里还会显示
select seq_users.nextval from dual;
可实际查询序列确发现该句并未调用而引起序列的变化。
这里要想使用oracle序列的正确做法是:
@Entity
@Table(name="sys_people")
@SequenceGenerator(name = "seqPeople", sequenceName = "seq_people")
public class SysPeople {
@Id
@GeneratedValue(generator="seqPeople")
@Column(name="people_id")
private Long peopleId;
@Column(name="people_name")
private String peopleName;
@Column(name="age")
private Long age;
@OneToOne
@JoinColumn(name="house_id")
private SysHouse sysHouse;
去掉strategy=GenerationType.SEQUENCE,即可。