一尘不染

如何使用界面和JPA

java

首先,我要说我是Java EE的新手,并且我在Java方面还没有扎实的理论背景。

我在掌握如何JPAinterfacesJava 结合使用时遇到了麻烦。为了说明我发现的困难,我创建了一个非常简单的示例。

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

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我要如何在要保留上述两个实体之间的关系的方法中正确处理这种情况?

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

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


阅读 237

收藏
2020-12-03

共1个答案

一尘不染

您可以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;
    }
}
2020-12-03