【发布时间】:2013-12-05 12:31:52
【问题描述】:
我正在开发 Java Web 项目,并且必须在表中插入用户记录。
需要为 user 表中的 ID 列值添加前缀,这意味着我们必须为序列生成的值添加前缀,如“user”,以获得 id 列的最终值为“user00001”,这是主键插入到表中的每条新记录。
我创建了一个序列和 DB 触发器,用于在将任何记录插入 DB 时填充 ID 列以满足上述要求。我正在使用 Oracle 11g 数据库。
在我的 Web 应用程序中,我必须使用 Hibernate 来执行与数据库相关的任务,例如插入、更新
我的表有以下 xml 配置
<hibernate-mapping>
<class name="UserProfile" table="USER_PROFILE">
<id name="id" type="string">
<column name="id"/>
<generator class="sequence">
<param name="sequence">USER_PROFILE_SEQ</param>
</generator>
</id>
<property name="firstName" type="string" column="FIRST_NAME"/>
<property name="middleName" type="string" column="MIDDLE_NAME"/>
<property name="lastName" type="string" column="LAST_NAME"/>
</class>
</hibernate-mapping>
并为用户配置文件创建了 Java bean,如下所示
public class UserProfile {
private String id;
private String firstName;
private String middleName;
private String lastName;
public UserProfile() {
super();
}
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the firstName
*/
public String getFirstName() {
return firstName;
}
/**
* @param firstName the firstName to set
*/
public void setFirstName(String firstName) {
this.firstName = firstName;
}
/**
* @return the middleName
*/
public String getMiddleName() {
return middleName;
}
/**
* @param middleName the middleName to set
*/
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
/**
* @return the lastName
*/
public String getLastName() {
return lastName;
}
/**
* @param lastName the lastName to set
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Hibernate 正在使用我在 xml 映射中分配的序列并获取该值,但不是将 id 列值填充为序列号,我希望它采用由 DB 触发器生成的值,该触发器采用序列值并添加一个前缀,如“用户” ' 在表中插入记录之前。
所以我的问题是如何在休眠中使用触发器生成的值填充 Id 列?由于我是 Hibernate 的新手,我下载了最新的 Hibernate 4.2.7 发行版。任何帮助将不胜感激。
注意:我不能将触发器作为应用程序团队的要求。
【问题讨论】: