Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA:如何处理多个实体_Java_Hibernate_Jpa_Spring Boot_Spring Data - Fatal编程技术网

Java JPA:如何处理多个实体

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

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

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

作为代码:

使用者 试试这个:

@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;

...
}