如何使用接口和JPA

时间:2012-01-22 21:19:06

标签: java java-ee jpa interface java-ee-6

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

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

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

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直接到实体?

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

1 个答案:

答案 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;
    }
}