如何使用接口和 JPA

2022-09-02 10:35:15

我应该首先说,我对Java EE相当陌生,而且我还没有很强的Java理论背景。

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

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

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

public interface Pet
{
    public String getName();
}

以及实现的实体以及实现的实体:PersonEntityPersonPetEntityPet

@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直接获得实体的依赖关系?

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


答案 1

可以在关系批注中使用目标实体属性。

@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;
    }
}

答案 2