当前位置: 首页 > 面试题库 >

如何使用界面和JPA

姜弘新
2023-03-14
问题内容

首先,我要说我是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直接获得对实体的依赖?

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


问题答案:

您可以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的新手,但我并没有真正了解如何使用比较器接口。我在一个班级和一个班级有一个的。在课堂上,我写道: getID()方法仅提供ID,我必须使用它来按字母顺序排列项目。我不确定这是否正确,这让我添加了注释,但不确定为什么。我也写了一个界面,上面写着: 我不确定那一点。另外,如何实现此方法来对在清单类中创建的arraylist进行排序? 谢谢,如果我的问题没有道理或需要澄清,请告诉

  • 我试图在typescript中创建一个带有子对象的对象。我正在尝试建立一个猫鼬模式,如本问题所示。 如果我将对象和子对象定义为接口,我就不能在可以设置为mongoose模式的常量中使用它们。 那么,有没有一种方法可以让我不必两次键入整个子对象,一次在接口中,一次输入常量中?

  • 问题内容: 我想为接口做一个JUnit测试用例,如您所知,我不能从该接口创建对象,并且我不希望在该测试中显示任何类名,我只想测试该接口,并且只在测试中使用它的方法。 所以,我不能实例化一个对象: 因为我不会使用任何类方法,并且我也不想将接口实例化为: 因为我不想覆盖测试中的方法。 更新: 我想测试BlaBla,但要处理其接口(内部)。 问题答案: 一个是合同。它没有逻辑可以测试。 您可以使用类似的

  • 问题内容: 为什么不清楚MenuItem如何导航到其他路线? 例如,当单击菜单项时,我要路由到“ /帐户” 我可以使用onclick函数来实现这一点,但是我敢肯定有一种更简单的方法。请告诉我有关它的信息,我想在我的项目中实现它。 顺便说一句,当使用containerElement时,出现以下错误: 当我通过-> 修复该错误时,该错误消失了,这是一个好消息,但坏消息是该菜单没有适用于Link中提到的

  • 为了辅助传统的命令行交互,Gradle还提供了一个图形界面.我们可以使用Gradle命令中—gui选项来启动它. 例子 12.1. 启动图形界面 gradle --gui 注意:这个命令执行后会使得命令行一直处于封锁状态,直到我们关闭图形界面. 不过我们可以另外加上“&”让它在后台执行: gradle --gui& 如果我们从自己的Gradle项目目录中启动这个图形界面,我们应该会看到任务树. 图

  • Webstorm中的工程 1.新建工程 点击顶部菜单栏“File”-> “New Project”。 弹出如下界面: “Location”指向想要创建的工程目录(如果该目录已经存在文件,会出现exist提示,没关系,直接下一步即可)。 “Project Type”为工程类型,应该理解为工程模版更合适,默认为空项目,Webstorm支持html5、bootstrap、NodeJs、express工程