Java Hibernate@ManyToMany有两个不必要的列
我在Java Hibernate@ManyToMany有两个不必要的列,java,hibernate,Java,Hibernate,我在@manytomy关系中有两个实体,我希望通过它们的ID将它们链接起来 一个用户可以是多个任务的管理者,一个任务可以有一个或多个管理者,非常简单 因此,我使用以下属性定义了实体: @Entity @Table(name = "task") public class TaskEntity { @Id @Column(unique = true, name="task_id") @GeneratedValue(strategy = GenerationType.AUTO)
@manytomy
关系中有两个实体,我希望通过它们的ID将它们链接起来
一个用户
可以是多个任务
的管理者,一个任务
可以有一个或多个管理者,非常简单
因此,我使用以下属性定义了实体:
@Entity
@Table(name = "task")
public class TaskEntity {
@Id
@Column(unique = true, name="task_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "user_task")
private Set<UserEntity> validators = new HashSet<>(0);
// Getters & setters
}
@实体
@表(name=“task”)
公共类任务实体{
@身份证
@列(unique=true,name=“task\u id”)
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“用户任务”)
私有集验证程序=新哈希集(0);
//接球手和接球手
}
及
@实体
@表(name=“\”user\”)
公共类用户实体{
@身份证
@列(unique=true,name=“user\u id”)
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“用户任务”)
私有集tasksToValidate=新哈希集(0);
//接球手和接球手
}
Hibernate会自动生成我的表,由于某种原因,user\u task
有4列:用户实体的ID、管理者的ID、TaskEntity的ID
和要管理的任务的ID。但正如您所看到的,这是一对相同的值
如何告诉Hibernate我只希望保留
用户实体的ID
和任务实体的ID
?您有双向多对多关系。必须将一面标记为父面,另一面标记为子面。为此,您必须在父端使用mappedBy
请参阅这篇关于使用多对多的最佳方法的文章:您具有双向多对多关系。必须将一面标记为父面,另一面标记为子面。为此,您必须在父端使用
mappedBy
请参阅这篇关于使用多对多的最佳方法的文章:尝试在子端使用
mappedBy
子端是TaskEntity
,因为它是由用户管理的?我应该映射用户id
?这取决于您的业务逻辑,但对我来说,您是right@Chris这取决于你决定哪一方是拥有方,哪一方是反面。我会让拥有方承担这项任务。尝试在子端上使用mappedBy
子端是TaskEntity
,因为它是由用户管理的?我应该映射用户id
?这取决于您的业务逻辑,但对我来说,您是right@Chris这取决于你决定哪一方是拥有方,哪一方是反面。我会让拥有方承担这项任务。
@Entity
@Table(name = "\"user\"")
public class UserEntity {
@Id
@Column(unique = true, name = "user_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "user_task")
private Set<TaskEntity> tasksToValidate = new HashSet<>(0);
// Getters & setters
}