我正在尝试使用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
答案 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泛型定义集合属性。一定是 另有规定。
您可以尝试指定targetEntity
或targetEntity = ExperimentNodeGroup.class
,看看是否有所不同。