如何与唯一查找表进行连接



我有一个用户表,其中有一个连接列到名为user_type的查找表。user_type表可能只包含四种不同的用户类型,它们将与用户记录相关联。我的实体代码:

UserEntity.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;
}

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_entity表的user_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,用户表将添加Joe,但user_type表也会添加Joe,这将导致以下user_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
这是我不想要的东西。我希望user_type列是唯一的。如果一个新用户是admin,我不希望在user_type表中添加新的admin记录。我希望将现有的一个分配给新用户。我希望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

最好在服务层找到一个现有的user_type记录,然后在它不存在的情况下创建一个吗?或者Hibernate是否有办法通过一些注释来处理这个问题?

Hibernate需要您想要链接到的记录的ID (PK),否则它假定您想要创建一个新记录。您需要进行查找以获取相关的用户类型记录,然后将该对象分配给UserEntity对象上的字段,然后您将获得所需的内容。这应该在你的服务层中完成。

最新更新