0

我在加载包含与另一个实体的可选一对一关系的实体时遇到问题。

当我尝试加载具有相应映射的实体时,一切似乎都很好,但有时(我猜是当我尝试加载CitationInformation没有相应映射的 时VenueTopic)我得到以下异常:

org.hibernate.PropertyAccessException: could not set a field value by reflection setter of

这些是我的课:

@Entity
public class CitationInformation {
    @Id
    @GeneratedValue
    private long identifier;

    private String doi;

    @OneToOne(optional = true, targetEntity = VenueTopic.class)
    @JoinColumn(name = "venue")
    @NotFound(action=NotFoundAction.IGNORE)
    private String venue;
    ...
}

@Entity
public class VenueTopic {
    @Id
    private String venueName;
    private String topic;
    ...
}

不幸的是,我需要处理这种肮脏的情况,因为我必须将我的休眠实体与来自另一个表的数据集成,而这些数据不是通过休眠生成的。

我想我在这段关系中搞砸了@OneToOne。我不确定我是否正确定义了它是可选的,以及我希望如何处理缺失值。

我想要的行为CitationInformation应该始终包含一个venue,但只有当有一个VenueTopic具有相同的实体时,关系才应该存在venueName

4

1 回答 1

1

我认为将 CitationInformation 类中的私有字符串场所从 String 类型更改为 VenuTopic 类型可能会解决问题。我不明白为什么您已经将类型字符串映射到另一个实体时使用它。

于 2013-01-15T00:03:57.947 回答