使用Hibernate中的预定义前缀填充Id列

时间:2013-12-05 12:31:53

标签: java sql oracle hibernate

我正在研究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作为其要求。

1 个答案:

答案 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>