mappedBy引用具有继承的未知目标实体属性

时间:2017-08-18 22:11:21

标签: java hibernate inheritance

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

@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

2 个答案:

答案 0 :(得分:0)

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

@Entity(access = AccessType.FIELD)

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

答案 1 :(得分:0)

这是hibernate的一个怪癖,它与bar(3): if ( 3 > 0 ) { x = x + bar(2); } bar(2): if ( 2 > 0 ) { x = x + bar(1); } bar(1): if ( 1 > 0 ) { x = x + bar(0); } bar(0): return 0; bar(1): return 1; bar(2): return 2; bar(3): return 3; 和继承无法正常工作。你能尝试指定mappedBy吗? Here's文档,这就是它所说的:

  

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

您可以尝试指定targetEntitytargetEntity = ExperimentNodeGroup.class,看看是否有所不同。