我的 JPA/Hibernate 之旅还在继续......
我正在尝试解决 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-快照
- hibernate-jpamodelgen 1.1.0.CR1
- hibernate validator 3.1.0.GA
- MySQL 5.1.6
- jsr250-api 1.0
- javax.validation 验证-api 1.0.0.GA
哇,真令人沮丧。现在 3 天全职尝试解决诸如此类的各种基本 ORM 问题。我觉得有缺陷。 :-(
最佳答案
这似乎是一个正确的代码。我在使用 Blob[] 时遇到了这个异常问题
@Lob
@Column(name="DOCUMENTO",nullable=false)
private Blob[] documento;
但是通过Byte[]改变,我解决了这个问题。
我只遇到过一次,查看 Oracle 数据类型,我看到这个 LONG 是可变长度的字符数据(VARCHAR2 数据类型的更大版本)。
我假设您的 ID 是一个整数....为什么不将 Long 更改为 Integer?您必须记住,它只接受原始类型。
这是我的代码,它运行良好:
@Id
@SequenceGenerator(sequenceName="SQ_DOCUMENTO",name="seqDocumento")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seqDocumento")
private Integer idDocumento;
我使用 Hibernate 3.5.6-final、Spring 3.0.4、Junit 4 和 Oracle 11g。
关于java - hibernate/JPA : could not set a field value by reflection setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4976388/