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,即可。