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

Java Hibernate实体:允许通过ID和对象本身设置相关对象

佟云
2023-03-14
问题内容

我有一个以下Java类,它也是一个Hibernate实体:

@Entity
@Table(name = "category")
public class Category {

    @ManyToOne
    @JoinColumn(name="parent_id")
    private Category parent;

    public Category getParent() {
        return parent;
    }

    public void setParent(Category parent) {
        this.parent = parent;
    }

类别表示类别树中的节点。我正在实现一个允许CRUD类别的Web服务。例如,该接口具有创建类别树节点的功能,并且可以将类别ID作为参数传递。

我只想创建一个新的Category对象,并将其持久化到数据库中,而无需获取父对象。我的数据提供程序类如下所示:

public void createCategory(int parent_id, String name, CategoryType type) {
    Category category = new Category();
    category.setName(name);
    // category.setParent(?); <- I don't have this object here
    // category.setParentId(id); <- but I do have the id
    category.setType(type);
    this.categoryDao.save(category);
}

我的问题是:如果假设我不会调用hibernate来为我获取父项(那将是愚蠢的),该怎么办才能创建一个新的Category对象并设置parent_id?我可以为Category类提供setParentId
/ getParentId方法吗?它会有什么hibernate注释?


问题答案:

Session.load()在这种情况下,Hibernate提供了一种称为(相当混乱)的方法。

Session.load()返回具有给定标识符的惰性代理,而无需查询数据库(如果具有给定标识符的对象已被加载到current中Session,则它本身返回一个对象)。

您可以使用该代理初始化要保存的实体中的关系:

category.setParent(session.load(Category.class, parent_id));

请注意,此代码不会检查Category具有给定ID的是否存在。但是,如果您的数据库架构中有外键约束,则在传入无效ID时会收到违反约束的错误。

等效于此方法的JPA称为EntityManager.getReference()



 类似资料:
  • 我试图坚持两个实体,它们有一对一和多对一的关系。 我正在尝试将表单集合嵌入到表单中。 我有一个多对一相关的实体,每次我创建一个新的课程简历,它与Candidat列相关candidat_id_id为空。 除了数据可数据中的Candidat id之外,只有实体Curendar umVitae被成功创建和持久化。 简历表 id|titre|candidat_id_id|id_education cand

  • 问题内容: 以下代码 使用V1.7.0_15 编译时没有错误,并且在运行时显示“ false”。但是,Eclipse Juno抱怨“操作数类型对象和布尔值不兼容”。 显然,javac自动装箱原始boolean ,然后通过对象相等(yielding)进行比较和自动装箱,而Eclipse拒绝执行自动装箱。 根据Java语言规范,哪种行为正确?我应该在哪里提交错误? 注意: 如果将的类型更改为,则事情将

  • 问题内容: 我正在用JavaScript构建一些对象并将这些对象推入数组,将要使用的键存储在变量中,然后像这样创建对象: 但是,当我尝试检查每个对象的对象数组时,键不是变量键的值。有什么方法可以通过变量设置键的值吗? 问题答案: 您需要先制作对象,然后使用来设置它。 如果您能够使用 ES6 和 Babel ,则可以使用此新功能:

  • 问题内容: 我有一个要在其中构建的轮播文件,所以我是: 在我使用低于: …但是我收到此错误消息: 有谁知道如何解决这个问题? 问题答案: 您使用的是Babel 6和Babel 7的组合。不能保证各个版本之间的兼容性: 应该 和 将是 我也很困惑,因为您没有在中提及,但是假设它在其中也应该进行更新。

  • 问题内容: 有谁知道我该如何在hibernate状态下做到这一点: 使用JPA? EntityManager有一个contains方法,但仅此而已! 我正在编写一些代码,充当实体和会话中存储的数据之间的转换器(因此,不是存储序列化的对象,而是仅存储类名和ID)。 问题答案: 有谁知道我可以用JPA在hibernate(…)中做到这一点? JPA 1.0没有等效的功能,因此如果您坚持使用JPA 1.

  • 在“设计状态形状”一章中,文档建议将您的状态保留在由ID设置关键帧的对象中: 将对象中的每个实体以ID作为键存储,并使用ID从其他实体或列表中引用它。 他们接着说 将应用的状态视为数据库。 我正在处理过滤器列表的状态形状,其中一些过滤器将被打开(它们显示在弹出窗口中),或者具有选定的选项。当我读到“把应用程序的状态想象成一个数据库”时,我想把它们想象成一个JSON响应,因为它将从API(本身由数据