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