我正在研究java Web Project,必须在Table中插入用户记录。
需要在用户表中为ID列值添加前缀,这意味着我们必须在序列生成的值中添加“user”之类的前缀,以获取id列的最终值为“user00001”,这是主键每个新记录都插入表中。
我已经创建了一个序列和数据库触发器,以便在DB中插入任何记录时填充ID列,以满足上述要求。我正在使用Oracle 11g DB。
在我的Web应用程序中,我必须使用Hibernate来执行与DB相关的任务,例如insert,update
我有我的表
的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>
并为User profile创建了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触发器生成的值,该触发器采用序列值并添加前缀,如'user '在将记录插入表格之前“。
所以我的问题是如何用触发器生成的值填充hibernate中的Id列?由于我是Hibernate的新手,我下载了最新的hibernate版本4.2.7发行版。任何帮助将不胜感激。
注意:我不能从应用程序团队中删除Triggers作为其要求。
答案 0 :(得分:1)
这篇文章对你有帮助吗? https://forum.hibernate.org/viewtopic.php?t=973262
在该帖子中提供了自定义生成器类,它允许数据库分配id。
映射将是这样的:
<id name="id" type="string">
<column name="id"/>
<generator class="jpl.hibernate.util.TriggerAssignedIdentityGenerator" />
</id>