java—如何使用唯一的查找表进行连接

n7taea2i  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(326)

我有一个用户表,它将有一个到名为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有没有办法用注解来处理这个问题?

rjzwgtxy

rjzwgtxy1#

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

相关问题