2014-04-24 108 views
0

我试图插入到多对多的关系中使用Hibernate,但我得到这个错误插入到多对多的关系。错误而使用Hibernate

2014年4月24日14:50:47820 ERROR [BasicPropertyAccessor.java:118]:抛出:IllegalArgumentException类:com.jellboi.maniartyre.entities.AbstractEntity,财产setter方法:p键

2014 -04-24 14:50:47,827错误[BasicPropertyAccessor.java:122]:预期类型:java.lang.Long,实际值:org.hibernate.id.IdentifierGeneratorHelper $ 2

2014年4月24日2:55: 25日下午org.apache.catalina.core.StandardWrapperValve调用 重度:Servlet.service()进行的servlet的ApplicationController抛出异常 java.lang.IllegalArgument例外:[email protected] 在sun.reflect.GeneratedMethodAccessor27.invoke(未知来源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke( Method.java:597)

这是我正在尝试的代码。 VehicleProduct类

@Entity 
@Table(name="m_vehicle_product") 
@AssociationOverrides({ 
@AssociationOverride(name = "pk.vehicle", 
     joinColumns = @JoinColumn(name = "vehicle_id")), 
@AssociationOverride(name = "pk.product", 
     joinColumns = @JoinColumn(name = "product_id")), 
}) 
public class VehicleProduct extends AbstractEntity{ 

private String service; 
private VehicleProductId pk = new VehicleProductId(); 

@Column(name = "service") 
public String getService() { 
    return service; 
} 

public void setService(String service) { 
    this.service = service; 
} 

@EmbeddedId 
public VehicleProductId getPk() { 
    return pk; 
} 

public void setPk(VehicleProductId pk) { 
    this.pk = pk; 
} 


@Transient 
public Product getProduct(){ 
    return getPk().getProduct(); 
} 

public void setProduct(Product product){ 
    getPk().setProduct(product); 
} 

@Transient 
public Vehicle getVehicle(){ 
    return getPk().getVehicle(); 
} 

public void setVehicle(Vehicle vehicle){ 
    getPk().setVehicle(vehicle); 
} 
} 

VehicleProductId类

@Embeddable 
public class VehicleProductId implements java.io.Serializable { 

private Vehicle vehicle; 
private Product product; 

@ManyToOne 
public Vehicle getVehicle() { 
    return vehicle; 
} 

public void setVehicle(Vehicle vehicle) { 
    this.vehicle = vehicle; 
} 

@ManyToOne 
public Product getProduct() { 
    return product; 
} 

public void setProduct(Product product) { 
    this.product = product; 
} 
} 

这就是我如何插入。

for(int i=0;i<jobid.length;i++){ 
      product = productService.findByPkey(jobid[i]); 
      vehicleProduct.setProduct(product); 
      vehicleProduct.setService(jobdesc[i]); 
      pkey2 = vehicleProductService.save(vehicleProduct); 
} 

请指导我。试着从几个小时来解决这个问题。

编辑

@MappedSuperclass 
public class AbstractEntity implements IEntity, Serializable{ 

private static final long serialVersionUID = 1L; 

private Long pkey; 
private Boolean deleted; 
private String creator; 
private Date created; 
private String changer; 
private Date changed; 
private Long version; 


@Id 
@GeneratedValue 
@Column(name="pkey") 
public Long getPkey() { 
    return pkey; 
} 
public void setPkey(Long pkey) { 
    this.pkey = pkey; 
} 

@Column(name="deleted") 
@XmlTransient 
public Boolean getDeleted() { 
    return deleted; 
} 
public void setDeleted(Boolean deleted) { 
    this.deleted = deleted; 
} 

@Column(name="creator") 
public String getCreator() { 
    return creator; 
} 
}........ 

它包含了所有这些getter和setter方法。

+1

你可以发布AbstractEntity的代码吗? –

+0

@ Shiraaz.M添加了代码。 – jellboi

回答

0

你的主要问题是这样的:

2014年4月24日14:50:47820 ERROR [BasicPropertyAccessor.java:118]:抛出:IllegalArgumentException类:com.jellboi.maniartyre.entities.AbstractEntity的属性setter方法:p键

2014年4月24日14:50:47827 ERROR [BasicPropertyAccessor.java:122]:预期类型:java.lang中。长,实际值:org.hibernate.id.IdentifierGeneratorHelper $ 2

如果你看一下你的代码,你有你的AbstractEntity定义的@Id并在您VehicleProduct的@EmbeddedId

我不知道你怎么样数据库表应该看起来,但它似乎包含AbstractEntity中的列以及VehicleProduct中定义的列。如果列不是在那里,那么你不应该从AbstractEntity继承。如果他们打算在那里,那么可以考虑将@EmbeddedId设置为@Embedded并为商业密钥强制执行一个唯一的约束。

+0

哇@ Shiraaz.M优秀。我刚才发现“@Id”和“@EmbeddedId”不能在一起,不知何故我错过了这一点。 感谢您的帮助。你让我的生活变得如此简单。 :) – jellboi

0

2014年4月24日14:50:47820 ERROR [BasicPropertyAccessor.java:118]:抛出:IllegalArgumentException类:com.jellboi.maniartyre.entities.AbstractEntity,财产setter方法:p键

2014-04 -24 14:50:47827 ERROR [BasicPropertyAccessor.java:122]:预计类型:java.lang.Long中,实际值:org.hibernate.id.IdentifierGeneratorHelper $ 2

我不知道这是你的如此,但考虑看看你跟踪我不得不说,Hibernate不支持复合PK与身份的一部分

Hibernate Jira composite PK identity part