hibernate annation oracle sequence

1691 ワード

struts 2 spring 3 mybatis 3は長い間使っていましたが、振り返って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を外してください.