java 应该在什么结构中保存来自两个hib实体的pair值

bttbmeg0  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(94)

我有两个实体用户和折扣。用户可以有许多折扣(奖金,额外的点什么)和折扣可以适用于许多用户。
通过这些关系Map,我得到了三个表:用户、折扣和用户_折扣。
我创建了公共Discount(针对所有用户),设置isActivated = true并在每个用户中保存折扣对象(不确定这是否有利于性能)。
我的问题是,当我想为一个用户停用折扣时-〉我通过id获取用户,获取折扣对象,并将字段isActivated设置为false,在该操作之后,每个用户都将此折扣字段设置为false。因此,每个用户都有一个共享对象。我想为用户分别启用/停用。如何解决这个问题?我应该在什么结构中保持此标记的启用/停用?
User_Discount表我实际上需要获取某个特定折扣是否分配给任何用户以及是否可以删除它的信息。也许我不需要这个Map?

@Data
@Entity
public class Discount {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private boolean isActivated;
    private BigDecimal value;
    private String discount_group;

    @ManyToMany
    @JoinTable(name = "user_discount", joinColumns = @JoinColumn(name = "discount_id"),
            inverseJoinColumns = @JoinColumn(name = "user_id"))
    @JsonIgnore
    private Set<User> users = new HashSet<>();
}

@Data
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long user_id;
    private String firstName;
    private String lastName;

    @ManyToMany(mappedBy = "users")
    private Set<Discount> discounts = new HashSet<>();

}
ioekq8ef

ioekq8ef1#

您需要为User_Discount表创建一个实体类,并向其中添加所需的其他字段。按用户获取User_Discount实体并更改其中的标志。check out this article.

相关问题