Java JPA:如何处理多个实体
我是JPA的新手,有一个关于如何处理实体的问题。在我的例子中,我有3个实体:用户、组和事件。 事件始终属于一个组。这意味着有一种单一的关系。用户可以订阅多个组,这意味着存在多个关系。现在是我遇到麻烦的部分。用户还可以订阅多个事件,这意味着还存在多个关系。 作为代码: 使用者 试试这个:Java JPA:如何处理多个实体,java,hibernate,jpa,spring-boot,spring-data,Java,Hibernate,Jpa,Spring Boot,Spring Data,我是JPA的新手,有一个关于如何处理实体的问题。在我的例子中,我有3个实体:用户、组和事件。 事件始终属于一个组。这意味着有一种单一的关系。用户可以订阅多个组,这意味着存在多个关系。现在是我遇到麻烦的部分。用户还可以订阅多个事件,这意味着还存在多个关系。 作为代码: 使用者 试试这个: @Entity public class Event{ @Id @GeneratedValue private Integer id; @ManyToOne @JoinColumn(name = "y
@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;
...
}
@实体
公开课活动{
@身份证
@生成值
私有整数id;
@许多酮
@JoinColumn(name=“your\u column”)
私人集团;
@许多
@可接合(…)
私人名单用户;
...
}
@实体
公共课组{
@身份证
@生成值
私有整数id;
@OneToMany(mappedBy=“集团”)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
私人列表活动;
...
}
组事件关系应该是多对多,因为多个组可以订阅多个事件,并且订阅可以重叠。通过联接表执行此操作,就像您使用User#subscribedGroup
一样,可以使用联接表执行One2Many和ManyToMany。@Antoniossss但这意味着一个事件可以有多个不可能的组。我不知道详细信息,但例如,管理员和版主应该能够订阅系统关闭事件-一个事件多个组。我想我对群体的概念是不同的,但这在这里并不重要。One2Many可以通过@JoinTable
完成。对于您显示的图表,事件可以有多个组-因此您的关系不同。如果单个事件只能有一个组,那么关系应该是1-1,我不理解。您要做的是获取用户->组->事件。这是可行的简单映射,你几乎没有。我不知道是什么给你带来了这些麻烦。使用其他联接表映射组事件(就像您对用户组所做的那样,但使用@OneToMany),或者将组id放置在事件中。
@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;
...
}