我有一个用户表,它将有一个到名为user\u type的查找表的联接列。用户类型表只能包含四种不同的用户类型,它们将与用户记录相关联。我的实体代码:
用户实体.java
package com.entity;
import lombok.*;
import javax.persistence.*;
@Getter
@Setter
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
@Setter(AccessLevel.NONE)
private Integer userId;
@Column(name = "first_name")
private String firstName;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_type_fk")
private UserTypeEntity userTypeEntity;
}
用户类型实体.java
package com.entity;
import lombok.*;
import javax.persistence.*;
@Getter
@Setter
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user_type")
public class UserTypeEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_type_id")
@Setter(AccessLevel.NONE)
private Integer userTypeId;
@Column(name = "user_type")
private String userType;
@OneToMany(mappedBy = "userTypeEntity")
private Set<UserEntity> userEntities;
}
当我保存一个新的userentity时,也会保存一个新的usertypeentity。我希望它表现得与众不同。如果user\u entity表的user\u entity列不包含传入值,我希望它只保存一个新的userentity。这是不是在服务层处理得最好?或者有没有什么方法来暗示冬眠应该这样做?
下面的一切都是对上述问题的详细阐述
假设我的user\ type表中有一行:
user_type_id = 3, user_type = "admin"
我有一个用户表,其中有一行:
user_id = 9, first_name = "Adam", user_type_fk = 3
我要添加此新用户:
user_id = 10, first_name = "Joe", user_type = "admin"
使用上面的实体代码,如果我使用userdao.save(joeuser)保存joe,user表将添加joe,但user\u type表也将添加joe,这将导致这个user\u type表:
user_type_id = 3, user_type = "admin"
user_type_id = 4, user_type = "admin"
以及此用户表:
user_id = 9, first_name = "Adam", user_type_fk = 3
user_id = 10, first_name = "Joe", user_type_fk = 4
这是我不想要的。我希望用户类型列是唯一的。如果一个新用户是管理员,我不希望一个新的管理员记录添加到用户类型表中。我希望将现有的一个分配给新用户。我希望usertype表的结果如下:
user_type_id = 3, user_type = "admin"
用户表如下:
user_id = 9, first_name = "Adam", user_type_fk = 3
user_id = 10, first_name = "Joe", user_type_fk = 3
在服务层,找到一个现有的用户类型记录,然后创建一个不存在的用户类型记录,这样做最好吗?或者hibernate有没有办法用注解来处理这个问题?
1条答案
按热度按时间rjzwgtxy1#
hibernate需要您要链接到的记录的id(pk),否则它假定您要创建一个新记录。您需要进行查找以获取相关的用户类型记录,然后将该对象分配给userentity对象上的字段,您将得到所需的内容。这应该在服务层中完成。