gpt4 book ai didi

mysql - Hibernate 使用 ManyToOne 注释保存新条目

转载 作者:行者123 更新时间:2023-11-29 06:29:43 24 4
gpt4 key购买 nike

我无法深入理解使用 ManyToOne 注释保存新条目。

我有两个表:

1) 用户组

@Entity
@Table(name="usergroup")
public class UserGroup{

@Id
@Column(name = "id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

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

@OneToMany(mappedBy="userGroup",
cascade= {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH}, fetch = FetchType.LAZY)
private List<User> users= new ArrayList<>();

//constructor, getter and setter

2) 用户

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

@Id
@Column(name = "id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


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

@ManyToOne(fetch = FetchType.LAZY, cascade= {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH}, optional = false)
@JoinColumn(name="user_group_id", referencedColumnName = "id")
private UserGroup userGroup;

第一个表 - UserGroup - 已用数据初始化。这是非常重要的。我想在为用户创建新条目时连接该信息。

所以用户拥有数据,例如

select * from usergroup;

id name
1 name1
2 name2
3 name3

我创建了 UserRepository

public interface UserRepository extends JpaRepository<User, Long> {

}

这是有问题的部分!

我想添加新用户,并提供 -> 名称和 ID 用户组。

服务:

@Override
@Transactional
public void create(String name, Long groupId) {
UserGroup userGroup = userGroupRepository.getOne(groupId);
User user = new User();
user.setName(name);
user.setUserGroup(userGroup)
userRepository.save(user);
}

问题出在哪里?

-> 新用户的 id 为空;-> 错误:无法执行语句; SQL [不适用];约束[唯一];嵌套异常是 org.hibernate.exception.ConstraintViolationException:无法执行语句

这是通过连接到现有条目来保存新条目的正确方法吗?我的意思是,我应该通过 id 找到现有条目并设置为新条目?

谢谢您的建议!

最佳答案

两个实体的更新如下。

@Id
@Column(name = "id") //removed attributes unique = true, nullable = false
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

通过指定nullable = false,Hibernate 在写入数据库之前检查ID 是否不为空。但是,对于 GenerationType.IDENTITY,ID 只会在数据库写入后设置,因此会出现错误。

关于mysql - Hibernate 使用 ManyToOne 注释保存新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57058565/

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