首先我要说的是,我对 Java EE 还很陌生,而且我还没有很强的 Java 理论背景。
我无法理解如何在 Java 中将 JPA
与 interfaces
一起使用。为了说明我发现的难点,我创建了一个非常简单的示例。
如果我有两个简单的接口(interface) Person
和 Pet
:
public interface Person
{
public Pet getPet();
public void setPet(Pet pet);
}
public interface Pet
{
public String getName();
}
还有一个实体 PersonEntity
实现了 Person
以及一个 PetEntity
实现了 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 */
}
如何在 setPet
方法中正确处理我想保持上述两个实体之间关系的情况?
我想使用接口(interface)的主要原因是因为我想保持模块/层之间对公共(public)接口(interface)的依赖性。我还能如何避免从例如获得依赖性我的 ManagedBean 直接到一个实体?
如果有人建议不要在实体上使用接口(interface),那么请解释有哪些替代方法或模式。
最佳答案
您可以使用 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;
}
}
关于java - 如何使用接口(interface)和 JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8964799/