使用Spring和Hibernate的多个具有额外列且无复合键概念的关系

使用Spring和Hibernate的多个具有额外列且无复合键概念的关系,spring,hibernate,Spring,Hibernate,我有两个表:Trade和Location,并且存在多对多关系。现在我必须在中间表Trade\u Location中添加额外的列作为“status”。我搜索了很多,但提供的所有解决方案都具有复合键。但是我想要一个没有复合键的解决方案,作为“Trade\u Location”表,作为它自己的唯一主键作为“id”。任何使用额外列和不使用复合键实现多个关系的建议。 谢谢。这是我的pojo: enter code here @Entity @Table(na

我有两个表:Trade和Location,并且存在多对多关系。现在我必须在中间表Trade\u Location中添加额外的列作为“status”。我搜索了很多,但提供的所有解决方案都具有复合键。但是我想要一个没有复合键的解决方案,作为“Trade\u Location”表,作为它自己的唯一主键作为“id”。任何使用额外列和不使用复合键实现多个关系的建议。 谢谢。这是我的pojo:

    enter code here
          @Entity
          @Table(name="trade")
         public class Trade {
     @Id
     @GeneratedValue
     private Long id;
         @Column(unique=true)
     private String name;

     @OneToOne
     @JoinColumn(name="sectorId")
     private Sector sector;

    @ManyToMany(mappedBy = "trades",fetch=FetchType.EAGER)
    private Set<Location> location =new HashSet<Location>();
    public Long getId() {
     return id;
    }

   @ManyToMany(mappedBy = "trades")
   private Set<Trainee> trainee = new HashSet<Trainee>();
       //getter and setter here
    }

    @Entity
    @Table(name="location")
    public class Location implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    private Long id;


    private String name;
    private Long stateId;
    private Long districtId;
    private Long cityId;
    private Long zoneId;
    @Column(name="yearEstablishment")
    private String yearOfEstablishment;

    @ManyToMany(fetch=FetchType.EAGER)
    @JoinTable(name = "trade_location",
            joinColumns={@JoinColumn(name="locationId")},
            inverseJoinColumns={@JoinColumn(name="tradeId")})
    private Set<Trade> trades = new HashSet<Trade>();
        //getter and setter
 }
@表(name=“location”) 公共类位置{

@Id
@GeneratedValue
private Long id;


private String name;
private Long stateId;
private Long districtId;
private Long cityId;
private Long zoneId;
@Column(name="yearEstablishment")
private String yearOfEstablishment;

/*@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "trade_location",
            joinColumns={@JoinColumn(name="locationId")},
            inverseJoinColumns={@JoinColumn(name="tradeId")})
private Set<Trade> trades = new HashSet<Trade>();*/

@OneToMany(mappedBy="location")
private Set<TradeLocation>tradeLocation=new HashSet<TradeLocation>(0);

/*getter and setter*/

}

如果您希望创建一个名为
TradeLocation
的实体作为具有id的独立表,则必须创建该实体

并将你的关系改为跟随


Trade
1..*
TradeLocation
Location

我做了相同的操作,但它不起作用,因为Trade与批处理类也有一对一的关系。它给出了以下错误:执行load命令时出错:org.hibernate.hibernate异常:找到了多个具有给定标识符的行:5
@Entity
@Id
@GeneratedValue
private Long id;


private String name;
private Long stateId;
private Long districtId;
private Long cityId;
private Long zoneId;
@Column(name="yearEstablishment")
private String yearOfEstablishment;

/*@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "trade_location",
            joinColumns={@JoinColumn(name="locationId")},
            inverseJoinColumns={@JoinColumn(name="tradeId")})
private Set<Trade> trades = new HashSet<Trade>();*/

@OneToMany(mappedBy="location")
private Set<TradeLocation>tradeLocation=new HashSet<TradeLocation>(0);

/*getter and setter*/
@Entity
@Table(name = "trade_location")
public class TradeLocation implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private Long id;

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="tradeId")
private Trade trade;

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="locationId")
private Location location;

//getter and setter