插入后,Hibernate从复合PK(DB中的序列)中获取ID

时间:2015-08-26 12:24:22

标签: java hibernate firebird

在插入记录后,如何通过数据库中的序列生成import static com.yourpackage.Log.*

Hibernate配置:

ID

<hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.firebirdsql.jdbc.FBDriver</property> <property name="hibernate.connection.password">masterkey</property> <property name="hibernate.connection.url">jdbc:firebirdsql:localhost/3050:FB3</property> <property name="hibernate.connection.username">SYSDBA</property> <property name="hibernate.dialect">org.hibernate.dialect.FirebirdDialect</property> <property name="hibernate.connection.autocommit">false</property> <property name="hibernate.connection.isolation">2</property> <property name="hibernate.connection.release_mode">on_close</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.use_sql_comments">true</property> <property name="hibernate.default_entity_mode">pojo</property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.generate_statistics">false</property> <property name="hibernate.hbm2ddl.auto">validate</property> <property name="hibernate.transaction.auto_close_session">false</property> <property name="hibernate.connection.charSet">UTF-8</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">10</property> <property name="hibernate.c3p0.timeout">5</property> <property name="hibernate.c3p0.idle_test_period">2</property> <property name="hibernate.c3p0.acquire_increment">1</property> <property name="javax.persistence.validation.mode">none</property> <mapping class="com.zvpblog.OraHib.model.fb.entity.MyTable"/> <mapping class="com.zvpblog.OraHib.model.fb.entity.Usr"/> </session-factory> </hibernate-configuration> 实体:

Usr

我尝试使用此代码,但未成功(@Entity @Table(name = "USR") public class Usr { @EmbeddedId private UsrPK id; @Column(name = "FNAME", columnDefinition = "VARCHAR") private String firstName; @Column(name = "DTMSTMP", columnDefinition = "TIMESTAMP") private Timestamp dTmStmp; @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "MYTABLEID") private MyTable myTable; public Usr() {} public Usr(String login, String firstName) { this.setId(new UsrPK(null, login)); this.setFirstName(firstName); } @Override public String toString() { Object[] args = { this.id.getId(), this.id.getLogin(), this.getFirstName(), this.getMyTable().getId(), getdTmStmp() }; MessageFormat text = new MessageFormat("Object: {0} [id={1}, login={2}, firstName={3}, myTableId={4}, dTmStmp={5}"); return text.format(args); } @Embeddable public static class UsrPK implements Serializable { private static final long serialVersionUID = 1L; @Column(name = "ID", columnDefinition = "BIGINT", unique = true) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PK") @SequenceGenerator(name = "PK", sequenceName = "GEN_USR_ID", allocationSize = 1) private Long id; @Column(name = "LOGIN") private String login; public UsrPK() {} public UsrPK(Long id, String login) { this.setId(id); this.setLogin(login); } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } } public UsrPK getId() { return id; } public void setId(UsrPK id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public Timestamp getdTmStmp() { return dTmStmp; } public void setdTmStmp(Timestamp dTmStmp) { this.dTmStmp = dTmStmp; } public MyTable getMyTable() { return myTable; } public void setMyTable(MyTable myTable) { this.myTable = myTable; } } 获取NULL):

id

控制台输出:

  

插入前 - &gt;&gt;&gt; null |登录&lt;&lt;&lt; -

     

Hibernate:/ * insert com.zvpblog.OraHib.model.fb.entity.Usr * / insert into USR(DTMSTMP,FNAME,MYTABLEID,ID,LOGIN)值(?,?,?,?,?)< / p>      

插入后 - >&gt;&gt;&gt; null |登录&lt;&lt;&lt; -

0 个答案:

没有答案