我应该首先说我是Java EE的新手,而且我还没有扎实的Java理论背景。
我在抓住如何在Java中使用JPA
和interfaces
时遇到了麻烦。为了说明我发现的困难,我创建了一个非常简单的例子。
如果我有两个简单的接口Person
和Pet
:
public interface Person
{
public Pet getPet();
public void setPet(Pet pet);
}
public interface Pet
{
public String getName();
}
实施PersonEntity
的实体Person
以及实施PetEntity
的{{1}}:
Pet
如何在@Entity
public class PersonEntity implements Person
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private PetEntity pet;
@Override
public void setPet(Pet pet)
{
/* How do i solve this? */
}
}
@Entity
public class PetEntity implements Pet
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
/* Getters and Setters omitted */
}
方法中正确处理案例,我想在其中保持上述两个实体之间的关系?
我想使用接口的主要原因是因为我想保持模块/层之间的依赖关系到公共接口。我怎样才能避免从例如我的ManagedBean直接到实体?
如果有人建议不要在实体上使用接口,请说明有哪些替代方法或模式。
答案 0 :(得分:18)
您可以在关系注释中使用targetEntity
属性。
@Entity
public class PersonEntity implements Person {
private Long id;
private Pet pet;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
@OneToOne(targetEntity = PetEntity.class)
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
}