如何使用接口和JPA

我应该首先说我是Java EE的新手,我还没有扎实的Java理论背景。

我在掌握如何在Java中使用JPAinterfaces遇到了麻烦。 为了说明我发现的困难,我创建了一个非常简单的例子。

如果我有两个简单的接口PersonPet

 public interface Person { public Pet getPet(); public void setPet(Pet pet); } public interface Pet { public String getName(); } 

实现Person的Entity PersonEntity以及实现PetPetEntity

 @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 */ } 

如何正确处理setPet方法中的情况,我想在其中保持上述两个实体之间的关系?

我想使用接口的主要原因是因为我想保持模块/层之间的依赖关系到公共接口。 如何避免从我的ManagedBean直接获取实体的依赖?

如果有人建议不要在实体上使用接口,那么请解释有哪些替代方法或模式。

您可以在关系注释中使用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; } }