java - 如何使用接口(interface)和 JPA

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

首先我要说的是,我对 Java EE 还很陌生,而且我还没有很强的 Java 理论背景。

我无法理解如何在 Java 中将 JPAinterfaces 一起使用。为了说明我发现的难点,我创建了一个非常简单的示例。

如果我有两个简单的接口(interface) 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 方法中正确处理我想保持上述两个实体之间关系的情况?

我想使用接口(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/

相关文章:

java - 与 JPA 的自连接关系

java - Weblogic 10 上的 Hibernate validator

mysql - Spring Hibernate JPA 遍历所有数据库模式和所有表

java - 将功能注入(inject)两个没有公共(public)父类(super class)的类

java - 使用所述类的抽象版本模拟通用类

java - 如何将标点符号从字符串末尾移动到开头?

java - 错误。数据库查询同时添加到多个列表

java - 使用 n 个应用程序服务器和 dao 作为 Web 系列扩展我的 Web 应用程序

java - 创建 Hello World Web 应用程序时遇到问题(安装 Geronimo Eclipse 插件)

java - 玩2.5 Ebean和JPA : NoSuchMethodError