gpt4 book ai didi

java - 如何将 Trigger 生成的值赋给 Hibernate ValueObject?

转载 作者:行者123 更新时间:2023-11-29 01:17:32 26 4
gpt4 key购买 nike

在我的 Hibernate 应用程序中,我正在使用创建一个 ValueObject 类

@Entity
@Table(name="user")
public class UserVO{

@Id
@Column(name="S_ID")
private String s_id;

@Column(name="FIRSTNAME")
private String firstName;

@Column(name="LASTNAME")
private String lastName;
}

在我的服务课上我是这样写的

public void createOrUpdateUser(UserVO userVO) {
userDAO.createOrUpdateUser(userVO);
}

在我的 DAO 类(class)中,我是这样写的

private EntityManager entityManager;
public void createOrUpdateUser(UserVO userVO) throws DataAccessException {
entityManager.persist(userVO);
}

现在我正在调用 createOrUpdateUser(userVO) 但它给出了错误

Caused by: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()

实际上我的数据库我已经为 user 表创建了一个 trigger 来为 s_id 列生成唯一的 id 是他们的触发器的任何问题。 .请给我建议..

最佳答案

如果您使用触发器,预期的生成策略是 org.hibernate.id.SelectGenerator。但是,为了使用此策略,Hibernate 必须能够在插入后定位插入的行以查看触发器分配的值有 2 种方法可以做到这一点。

首先是专门配置生成器以告诉它在表中定义唯一键(至少在逻辑上)的列:

@Id
@Column(name="S_ID")
@GeneratedValue( strategy = "trigger" )
@GenericGenerator(
name="trigger", strategy="org.hibernate.id.SelectGenerator",
parameters = {
@Parameter( name="keys", value="userName" )
}
)
private String s_id;

private String userName;

另一个是通过 Hibernate 的 natural-id 支持:

@Id
@Column(name="S_ID")
@GeneratedValue( strategy = "trigger" )
@GenericGenerator( name="trigger", strategy="org.hibernate.id.SelectGenerator" ) )
private String s_id;

@NaturalId
private String userName;

GenerationType.IDENTITY 可能适合您。这将真正归结为 JDBC 驱动程序以及它如何(如果)实现 getGeneratedKeys

关于java - 如何将 Trigger 生成的值赋给 Hibernate ValueObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13085508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com