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
}