2014-04-24 68 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