Java Hibernate/JPA:无法通过反射设置器设置字段值
我的JPA/Hibernate odyssey继续 我正在努力解决这个问题,所以我必须在我的类中定义使用3个实体字段作为复合键的基元@id。这似乎让我走得更远,但现在我在坚持的时候得到了:Java Hibernate/JPA:无法通过反射设置器设置字段值,java,hibernate,jpa,Java,Hibernate,Jpa,我的JPA/Hibernate odyssey继续 我正在努力解决这个问题,所以我必须在我的类中定义使用3个实体字段作为复合键的基元@id。这似乎让我走得更远,但现在我在坚持的时候得到了: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of com.example.model.Langua
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
- hibernate jpamodelgen 1.1.0.CR1
- hibernate验证程序3.1.0.GA
- MySQL 5.1.6
- jsr250 api 1.0
- javax.validation api 1.0.0.GA
哇,真令人沮丧。现在有3天的全职时间来解决各种问题,比如基本的ORM。我觉得自己有缺陷-(您必须删除
@GeneratedValue
注释。这似乎是正确的代码。我在使用Blob[]时遇到了此异常问题
@Lob
@Column(name="DOCUMENTO",nullable=false)
private Blob[] documento;
但是通过改变字节[],我解决了这个问题
我只看到了一个实例,看看Oracle数据类型,我看到这个LONG是可变长度的字符数据(VARCHAR2数据类型的更大版本)。
我假设您的ID是一个整数……为什么不按整数更改Long?您必须记住,它只接受基本类型
这是我的代码,工作正常:
@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。谢谢Arthur,但在我的例子中,这是单向关系。此外,我尝试过将注释移动到getter,但似乎没有帮助。你有
@IdClass
吗?还要从员工中删除@Id
。axtavt-我尝试过@IdCl我从中得到了另一个更奇怪的错误:“原因:java.sql.SQLException:参数索引超出范围(5>参数数量,即4)。”是的,您完全正确地认为@Id应该从Staffer中删除,因为它是在原语中定义的,谢谢。您找到了这个问题的解决方案吗?我面临着类似的问题。。。