java - JPA:如何处理多个实体

标签 java hibernate jpa spring-boot spring-data

我是 JPA 的新手,对如何处理实体有疑问。在我的例子中,我有 3 个实体:用户、组和事件。

一个事件总是属于一个组。这意味着存在一对多关系。一个用户可以订阅多个组,这意味着存在多对多关系。现在是我遇到麻烦的部分。用户还可以订阅多个事件,这意味着还有一个多对多关系。

enter image description here 作为代码:

用户

@Entity
public class User {

    @Id
    @GeneratedValue
    private Integer id;

    @Embedded
    @OneToOne
    @JoinColumn(name = "company_location")
    private CompanyLocation companyLocation;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
            name = "user_group_subscriptions",
            joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"))
    private List<Group> subscribedGroups;
    ...
}

@Entity
public class Group {

    @Id
    @GeneratedValue
    private Integer id;

    @OneToMany(???)
    private List<Event> events;
    ...
}

现在是我的问题。我怎样才能在我的组实体中获得一个列表,其中包含依赖于用户实体的订阅事件? 我的目标是这样的:

user.getSubscribedGroups().get(0).getSubscribedEvents();

最佳答案

试试这个:

@Entity
public class Event{

@Id
@GeneratedValue
private Integer id;

@ManyToOne
@JoinColumn(name = "your_column")
private Group group;

@ManyToMany
@JoinTable(....)
private List<User> users;

...

}

@Entity
public class Group {

@Id
@GeneratedValue
private Integer id;

@OneToMany(mappedBy = "group")
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Event> events;

...
}

关于java - JPA:如何处理多个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40487300/

相关文章:

java - 如何防止在 Spring 执行第二个查询?

java - Jasypt 使用 Bouncy CaSTLe 的 EncryptionOperationNotPossibleException

java - JPA 一对多关系中外键分配给 NULL

javax.persistence.PersistenceException : No Persistence provider for EntityManager named XX

java - 在 SpringBoot 应用程序中使用 @RolesAllowed 的异常

java - 不可分割的分离器

java - Lucene中跨多个字段的重复值的影响

java - 如果Java中的 "protected"字给你与默认访问相同的访问权限,那么它有什么意义呢?

jpa - FROM 子句中的 JPA 子查询是否可能?

jpa - 如何从 JPA 获取分离对象