当前位置: 首页 > 知识库问答 >
问题:

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

南门祯
2023-03-14

我正在从事java Web项目,必须在表中插入用户记录。

需要在user表中的ID列值中添加前缀,这意味着我们必须将像“user”这样的前缀添加到序列生成的值中,以获得id列的最终值为“user00001”,这是每个新记录的主键插入表中。

我创建了一个序列和DB触发器,用于在DB中插入任何记录以满足上述要求时填充ID列。我正在使用Oracle 11g DB。

在我的Web应用程序中,我必须使用Hibernate来执行与DB相关的任务,如插入、更新

我的Table有以下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>

并为用户概要文件创建了JavaBean,如下所示

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发行版。任何帮助都将不胜感激。

注意:我不能根据应用程序团队的要求删除触发器。

共有1个答案

酆华皓
2023-03-14

这篇文章对你有帮助吗?https://forum.hibernate.org/viewtopic.php?t=973262

在这篇文章中,提供了自定义生成器类,该类允许数据库分配id。

映射如下:

<id name="id" type="string">
    <column name="id"/>
    <generator class="jpl.hibernate.util.TriggerAssignedIdentityGenerator" />
</id>
 类似资料:
  • 问题内容: 我遇到了一个以前不必处理的问题。我正在用Java为数据库编写一个补丁,该补丁基本上是在转换存储在某些行中的数据。为了做到这一点,我有一个转换表,告诉我什么值变成什么。 例如,如果我读了“ RC”,“ AC”,“ GH”之一->将值更新为“ T1”。(这些只是随机的示例,基本上是将一个字符串转换为另一个字符串。) 我需要一种存储这些转换的好方法。我在想一个哈希图:KEY,VALUE:(R

  • 问题内容: 我接下来还有几粒豆: 我正在尝试执行下一个Hibernate查询: 问题: 我了解Hibernate正在寻找类似的东西: 代替: 关于如何在不创建新bean的情况下解决此问题的想法? 谢谢! 问题答案: 我写了一个ResultTransformer可以解决您的问题。它的名称是AliasToBeanNestedResultTransformer,请在github上查看。

  • 问题内容: 我对Java,JavaFX和编程一般还是有点陌生​​,但是我遇到的问题困扰着我。 在大多数教程中,我查找了有关填充ListView(更具体地说,使用ObservableArrayList)的方法,最简单的方法是从String的ObservableList中创建它,如下所示: 但是我不想使用字符串。我想使用我制作的名为Words的自定义对象: 每个Word对象只有两个属性:wordStr

  • 我对Java、JavaFX和一般编程都有点陌生,我有一个问题让我大吃一惊。 在我查阅的大多数关于填充ListView(更具体地说,使用ObservableArrayList)的教程中,最简单的方法是从字符串的ObservableList创建它,如下所示: 但我不想用字符串。我想使用我制作的一个名为Words的自定义对象: 要明确的是,这不是android的,单词列表最终会被更改、保存和加载,所以我

  • 问题内容: 在Java中,如何创建在构建时填充的最终Set?我想做以下事情: 但是我不知道Java的正确语法。 问题答案: 试试这个成语:

  • 我正在从Ajax JSON创建一个DataTable。 将创建DataTables,但它显示一个错误: DataTables警告:表ID=CHANGETABLE-为行0,列0请求未知参数“0”。有关此错误的详细信息,请参阅http://datatables.net/TN/4 我的JSON看起来如下所示 在我的Java控制器中创建了这样的JSON对象: 我不知道如何将此信息与 属性一起使用,以使其适