【问题标题】:Populating Id column with a predefined Prefix in Hibernate在 Hibernate 中使用预定义的前缀填充 Id 列
【发布时间】: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 发行版。任何帮助将不胜感激。

注意:我不能将触发器作为应用程序团队的要求。

【问题讨论】:

    标签: java sql oracle hibernate


    【解决方案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>
    

    【讨论】:

    • 感谢您的链接将检查它,但我正在使用 Hibernate 4.2.7 版本,并且在那篇文章中它是为 3.6 版本开发的。仍然会检查它。
    • 我查看了 hibernate 论坛并将相同的代码更新到 Hibernate 4 这里是相同的链接:link 它对我的情况很好。
    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 2022-01-10
    • 1970-01-01
    • 2013-06-02
    • 2022-01-24
    • 2021-03-06
    • 2020-12-09
    • 1970-01-01
    相关资源
    最近更新 更多