首先,我要说我是Java EE的新手,并且我在Java方面还没有扎实的理论背景。
我在掌握如何JPA与interfacesJava 结合使用时遇到了麻烦。为了说明我发现的困难,我创建了一个非常简单的示例。
JPA
interfaces
如果我有两个简单的接口Person和Pet:
Person
Pet
public interface Person { public Pet getPet(); public void setPet(Pet pet); } public interface Pet { public String getName(); }
而一个实体PersonEntity,它实现Person还有一个PetEntity它实现了Pet:
PersonEntity
PetEntity
@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我要如何在要保留上述两个实体之间的关系的方法中正确处理这种情况?
setPet
我要使用接口的主要原因是因为我想保持模块/层之间对公共接口的依赖性。我还要如何避免例如从ManagedBean直接获得对实体的依赖?
如果有人建议不要在实体上使用接口,请说明存在哪些替代方法或模式。
您可以targetEntity在关系注释中使用属性。
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; } }