我的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生成)。
这是我的libs。我并不完全相信我正在使用一组兼容的持久性库(对烹饪手册的详细介绍如何正确地混合和匹配这些库将受到高度赞赏。)
答案 0 :(得分:1)
这似乎是正确的代码。当我使用Blob []
时,我遇到了这个异常的问题@Lob
@Column(name="DOCUMENTO",nullable=false)
private Blob[] documento;
但是通过Byte []改变,我解决了这个问题。
我只看到了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-final,Spring 3.0.4,Junit 4和Oracle 11g。
答案 1 :(得分:-1)
您必须删除@GeneratedValue
注释。