hibernate annation oracle sequence
1691 ワード
struts 2 spring 3 mybatis 3は長い間使っていましたが、振り返ってhibernateを使うと、annationのoracleシーケンスが意識的に使われていることがわかりました
以上のように、このセグメントに参加するとhibernate自身のシーケンスを使用し、oracleで生成されたシーケンスseq_を放棄します.users.
困ったことに、そのオブジェクトを書き込むと、印刷されたhqlにも表示されます.
実際のクエリー・シーケンスでは、文が呼び出されずにシーケンスの変化が発生していることが確認されます.
ここでoracleシーケンスを使用する正しい方法は、次のとおりです.
strategy=GenerationType.SEQUENCEを外してください.
@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を外してください.