【问题标题】:mappedBy reference an unknown target entity property with inheritancemappedBy 通过继承引用未知的目标实体属性
【发布时间】:2017-08-18 22:11:20
【问题描述】:

我正在尝试使用休眠将实体存储在数据库中。我有以下课程:

@Entity
public class UsableRemoteExperiment extends RemoteExperiment {
private List<ExperimentNodeGroup> nodeGroups = new ArrayList<>();


@OneToMany(mappedBy = "experiment", cascade = CascadeType.ALL, orphanRemoval = true)
public List<ExperimentNodeGroup> getNodeGroups() {
    return nodeGroups;
}

public void setNodeGroups(final List<ExperimentNodeGroup> nodeGroups) {
    this.nodeGroups = nodeGroups;
}
/* More getters and setters for other attributes */

实验节点组如下所示:

@Entity
public class ExperimentNodeGroup extends NodeGroup {

private List<Node> nodes = new ArrayList<>();
/* More getters and setters for other attributes */

NodeGroup 类看起来像这样:

@Entity
public abstract class NodeGroup extends GeneratedIdEntity {
protected Experiment experiment;

@ManyToOne(optional = false)
@JsonIgnore
public Experiment getExperiment() {
    return experiment;
}
/* More getters and setters for other attributes */

现在当我尝试编译代码时,我得到了这个错误:

引起:org.hibernate.AnnotationException: mappedBy 引用一个 未知目标实体属性: [...].ExperimentNodeGroup.experiment 在 [...].UsableRemoteExperiment.nodeGroups

【问题讨论】:

    标签: java hibernate inheritance


    【解决方案1】:

    这是休眠的怪癖之一,它无法按预期使用mappedBy 和继承。您也可以尝试指定targetEntity 吗? Here's 文档,这就是它所说的:

    作为关联目标的实体类。仅可选 如果集合属性是使用 Java 泛型定义的。一定是 另有规定。

    您可以尝试指定targetEntity = ExperimentNodeGroup.classtargetEntity = Transaction.class 看看是否有任何不同。

    【讨论】:

    • 将其设置为 ExperimentNodeGroup 不会改变任何内容。将其设置为事务会生成此错误:Use of @OneToMany or @ManyToMany targeting an unmapped class: [...].UsableRemoteExperiment.nodeGroups[javax.transaction.Transaction]
    • 你可以试试org.hibernate.transaction吗?
    • 我已经做了,效果一样。我现在使用了“肮脏的解决方法”:我将实验属性移动到子类....如果有更好的方法我会尝试它,但现在它可以工作
    【解决方案2】:

    我认为这里的问题是你还需要放置一个 setter,hibernate 假设如果你有一个从数据库中获取的 getter,你将需要一个 setter 来读取它,你可以放置一个 setter,或者使用

    @Entity(access = AccessType.FIELD)
    

    并将注释放在您的属性上。

    【讨论】:

    • 是的,我有一个setter,只是在我删除其他setter时不小心被删除了
    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多