【发布时间】:2011-06-25 23:19:47
【问题描述】:
我的 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 生成)。
这是我的库。我并不完全相信我正在使用一组兼容的持久性库(对详细说明如何正确混合和匹配这些的食谱的参考将不胜感激。)
- 休眠 3.5.6-SNAPSHOT
- hibernate-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。我觉得有缺陷。 :-(
【问题讨论】:
-
谢谢亚瑟,但在我的情况下,这是一个单向的关系。此外,我确实尝试将我的注释移动到 getter,但这似乎没有帮助。
-
你有
@IdClass吗?同时从staffer中删除@Id。 -
axtavt- 我试过@IdClass。我从中得到另一个更奇怪的错误:“原因:java.sql.SQLException:参数索引超出范围(5 > 参数数量,即 4)。”是的,您应该从 Staffer 中删除 @Id 是非常正确的,因为它是在原语上定义的,谢谢。
-
您找到解决此问题的方法了吗?我面临着类似的事情......