我想用Hibernate坚持我的小动物园:
@Entity
@Table(name = "zoo")
public class Zoo {
@OneToMany
private Set<Animal> animals = new HashSet<Animal>();
}
// Just a marker interface
public interface Animal {
}
@Entity
@Table(name = "dog")
public class Dog implements Animal {
// ID and other properties
}
@Entity
@Table(name = "cat")
public class Cat implements Animal {
// ID and other properties
}
Run Code Online (Sandbox Code Playgroud)
当我试图坚持动物园时,Hibernate抱怨道:
Use of @OneToMany or @ManyToMany targeting an unmapped class: blubb.Zoo.animals[blubb.Animal]
Run Code Online (Sandbox Code Playgroud)
我知道targetEntity- @OneToMany但这意味着,只有狗或猫可以住在我的动物园.
有没有办法用Hibernate来持久化一个具有多个实现的接口集合?
我有一个抽象的MappedSuperClass,参与者,它由三种"参与者"扩展.然后每个人都使用自己的'Project',也是一个抽象的MappedSuperClass.但是,我希望基类了解Projects,这样我就可以编写通用代码来与Participants进行交互.如何使用Hibernate注释指定它?以及如何在ExtendedParticipant和ExtendedProject类中覆盖它?
每个Participant类型和每个Project类型都有自己的数据库表,其中包含我无法更改的现有数据和ID(在表中不唯一).
以下代码给出了IDE错误"多对一属性不应该是'Mapped Superclass'".
@MappedSuperclass
public abstract class Participant implements Persistable {
...
@ManyToOne
@JoinColumn(name = "project_id")
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
...
}
Run Code Online (Sandbox Code Playgroud)
并且Project类与同样的问题大致相同:
@MappedSuperclass
public abstract class Project implements Persistable {
...
@OneToMany
public List<Participant> getParticipants() {
return participants;
}
public void setProject(List<Participant> participants) {
this.participants = participants;
}
...
}
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚如何使用JPA干净地执行标记云,其中每个数据库实体可以有许多标记.
例如
帖子可以有0个或更多标签用户可以有0个或更多标签
在JPA中有一种更好的方法,而不是让所有实体都像Taggable抽象类那样子类吗?标签实体将引用许多Taggables.
编辑:标签云只是简化我遇到的问题的一个示例.在我的场景中,关系应该是OneToMany,其中Tag不能被重用.
谢谢