[英]issue with JPA many to many with extra column in join table
I m trying to set a JPA mapping for a many-to-many relationship with an extra column in the join table. 我正在尝试使用联接表中的额外列为多对多关系设置JPA映射。 My model looks like this : Hikelist (id), Item(id), ItemList(idList, itItem, quantity)
我的模型如下所示:清单列表(id),商品(id),商品列表(idList,itItem,数量)
My mapping : 我的地图:
Item : 项目:
@Entity
@Table(name = "T_ITEM")
public class Item implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
private Collection<Itemlist> setOfItemHikelist = new ArrayList<Itemlist>();
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.item", cascade=CascadeType.ALL)
public Collection<Itemlist> getSetOfItemHikelist() {
return setOfItemHikelist;
}
public void setSetOfItemHikelist(Collection<Itemlist> setOfItemHikelist) {
this.setOfItemHikelist = setOfItemHikelist;
}
}
ItemList: 物品清单:
@Entity
@Table(name = "T_ITEM_LIST")
@AssociationOverrides({
@AssociationOverride(name = "pk.item",
joinColumns = @JoinColumn(name = "iditem")),
@AssociationOverride(name = "pk.hikelist",
joinColumns = @JoinColumn(name = "idlist")) })
public class Itemlist implements Serializable {
private ItemListId pk = new ItemListId();
@EmbeddedId
public ItemListId getPk() {
return pk;
}
public void setPk(ItemListId pk) {
this.pk = pk;
}
@Transient
public Item getItem() {
return getPk().getItem();
}
public void setStock(Item item) {
getPk().setItem(item);
}
@Transient
public Hikelist getHikelist() {
return getPk().getHikelist();
}
public void setCategory(Hikelist hikelist) {
getPk().setHikelist(hikelist);
}
private String quantity;
public String getQuantity() {
return quantity;
}
public void setQuantity(String quantity) {
this.quantity = quantity;
}
}
ItemListId: ItemListId:
@Embeddable
public class ItemListId implements java.io.Serializable{
private Item item;
private Hikelist hikelist;
@ManyToOne
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
@ManyToOne
public Hikelist getHikelist() {
return hikelist;
}
public void setHikelist(Hikelist hikelist) {
this.hikelist = hikelist;
}
}
I m getting this error : 我收到此错误:
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Collection, at table: T_HIKELIST, for columns: [org.hibernate.mapping.Column(setOfItemHikelist)] at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:336) at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:310) at org.hibernate.mapping.Property.isValid(Property.java:241) at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:496) at org.hibernate.mapping.RootClass.validate(RootClass.java:270) at org.hibernate.cfg.Configuration.validate(Configuration.java:1358) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1849) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
原因:org.hibernate.MappingException:无法确定类型:java.util.Collection,在表:T_HIKELIST,对于列:[org.hibernate.mapping.Column(setOfItemHikelist)]在org.hibernate.mapping.SimpleValue。 org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:310)的org.hibernate.mapping.Property.isValid(Property.java:241)的getType(SimpleValue.java:336)org.hibernate.mapping.PersistentClass的getType(SimpleValue.java:310) org.hibernate.mapping.RootClass.validate(RootClass.java:270)的org.hibernate.cfg.Configuration.validate(Configuration.java:1358)的org.hibernate.cfg的.validate(PersistentClass.java:496)。 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform上的Configuration.buildSessionFactory(Configuration.java:1849)(EntityManagerFactoryBuilderImpl.java:850)
If someone can help me on this... thank you! 如果有人可以帮助我...谢谢!
I think you are mixing AccesType , in the class Item you use the annotations in FIELDS and PROPERTIES, consider do this. 我认为您正在混合AccesType,在Item类中使用FIELDS和PROPERTIES中的注释,请考虑这样做。
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.item", cascade=CascadeType.ALL)
private Collection<Itemlist> setOfItemHikelist = new ArrayList<Itemlist>();
public Collection<Itemlist> getSetOfItemHikelist() {
return setOfItemHikelist;
}
Put the annotations over the fields as you did in the Id in the same class 像在同一个类的ID中一样,将注释放在字段上
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.