2011-02-12 71 views
5

我的JPA/Hibernate的奧德賽繼續...休眠/ JPA:無法設置反射二傳手字段值

我試圖解決this issue,所以我有我的類定義基本@Ids使用3個實體字段作爲組合鍵。這似乎讓我遠一點,但持續的時候,現在我得到這樣的:

javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of com.example.model.LanguageSkill.stafferId 

這裏是我的複合類:

public class LanguageSkill implements Serializable 
{ 
    @Id 
    @GeneratedValue (strategy = GenerationType.IDENTITY) 
    @Column(name = "Staffer_ID") 
    private Long stafferId; 

    @Id 
    @ManyToOne(cascade = CascadeType.ALL) 
    @MapsId(value = "stafferId") 
    private Staffer staffer; 

    @Id 
    @GeneratedValue (strategy = GenerationType.IDENTITY) 
    @Column(name = "Language_ID") 
    private Long languageId; 

    @ManyToOne 
    @MapsId(value= "languageId") 
    private Language language; 

    @Id 
    @GeneratedValue (strategy = GenerationType.IDENTITY) 
    @Column(name = "Language_Proficiency_ID") 
    private Long languageProficiencyId; 

    @ManyToOne 
    @MapsId(value= "languageProficiencyId") 
    private LanguageProficiency languageProficiency; 
} 

我有適當的getter和setter(IDE生成)既適用於基元也適用於實體。

這是我的庫。我不完全相信,我用一組兼容的持久庫(以一本食譜參考,詳細說明如何正確地混合和匹配這些將非常感激。)

  • 的Hibernate 3.5.6-SNAPSHOT
  • 休眠-jpamodelgen 1.1.0.CR1
  • 冬眠驗證器3.1.0.GA
  • 的MySQL 5.1.6
  • JSR250-API 1.0
  • javax.validation驗證-API 1.0.0.GA

哇,這很令人沮喪。現在3天全職試圖解決這樣的各種問題,只是基本的ORM。我感覺有缺陷。 :-(

+0

看看http://stackoverflow.com/questions/2001007/2039553#2039553 – 2011-02-12 06:08:45

回答

-1

您必須刪除@GeneratedValue註解。

1

這似乎是一個正確的代碼。我有問題,這個例外,當我用一滴[]

@Lob 
@Column(name="DOCUMENTO",nullable=false) 
private Blob[] documento; 

但是通過字節改變[] ,我解決了這個問題

我只有一個事件,看Oracle數據類型,我看過這個LONG是變長字符數據(VARCHAR2數據類型較大的版本)

我假設你的ID是一個Integer ....爲什麼不改變Long整數?你必須記住它只接受原始類型。

這是我的代碼,它工作正常:

@Id 
@SequenceGenerator(sequenceName="SQ_DOCUMENTO",name="seqDocumento") 
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seqDocumento") 
private Integer idDocumento; 

我使用Hibernate 3.5.6決賽,春季3.0.4,JUnit 4中和Oracle 11g。