gpt4 book ai didi

java - 如何仅检索关联的 ID 而不是实体?

转载 作者:行者123 更新时间:2023-12-04 18:34:17 26 4
gpt4 key购买 nike

我有一个看起来像这样的类(class):

@Entity
public class EdgeInnovation {
@Id
public long id;
@ManyToOne
public NodeInnovation destination;
@ManyToOne
public NodeInnovation origin;
}

另一个看起来像这样:
@Entity
public class NodeInnovation {
@Id
public long id;
@OneToOne
public EdgeInnovation replacedEdge;
}

因此每个表都映射到另一个表,因此一个实体将引用其他实体,这些实体将引用更多实体,依此类推,最终将从数据库中获取许多实体。有没有办法只获取键的值(整数/长)而不是它所指的实体?像这样:
@ManyToOne(referToThisTable="NodeInnovation")
@Entity
public class EdgeInnovation {
@Id
public long id;
@ManyToOne(referToTable="NodeInnovation")
public Long destination;
@ManyToOne(referToTable="NodeInnovation")
public Long origin;
}


@Entity
public class NodeInnovation {
@Id
public long id;
@OneToOne(referToTable="EdgeInnovation")
public Long replacedEdge;
}

Here's an example.

这是一个例子。我想要绿色的东西,我得到所有红色的东西。这浪费了从磁盘读取的内存和时间。

最佳答案

您只需将外键映射为基本映射而不是关系:

@Entity
public class EdgeInnovation {
@Id
public long id;
@Column(name="DESTINATION_ID")
public Long destination;
@Column(name="ORIGIN_ID")
public Long origin;
}

或者,您可以同时访问 EdgeInnovation 中的 ID 和引用实体,但您需要决定要使用哪个来设置映射:
@Entity
public class EdgeInnovation {
@Id
public long id;
@Column(name="DESTINATION_ID", updatable=false, insertable=false)
public Long destination_id;
@ManyToOne
public NodeInnovation destination;
@Column(name="ORIGIN_ID", updatable=false, insertable=false)
public Long origin_id;
@ManyToOne
public NodeInnovation origin;
}

在上面的例子中, origin_id 是只读的,而 origin 引用用于设置表中的外键。但是,应该对这两个字段进行任何更改,以保持对象映射彼此同步。

另一种选择是使用提供者的 native 代码来查找引用是否是惰性的且未被触发,然后获取外键值。如果它已被触发,您可以只使用引用来获取 ID 值,因为它不会导致查询获取任何内容。不过,这是您必须查看 EclipseLink 的源代码的内容。

关于java - 如何仅检索关联的 ID 而不是实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36212319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com