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

如何在JPA中定义单向OneToMany关系

阎坚成
2023-03-14
问题内容

我在JPA中使用实体映射存在以下问题。我有两个实体,第一个是Lookup,第二个是Text,它表示实体的翻译。现在,我需要将Lookup绑定到Text,但是我不希望Text引用Lookup。更复杂的是,Text在此关系中不使用其主键,而是在TXTHEAD_CODE列中定义的元代码

Lookup.java

@Entity
@Table(name = "DATREG")
public class Lookup implements PersistableEntity {

    @Id
    @Column(name = "DATREG_META_CODE")
    private String metaCode;

    @OneToMany
    @JoinTable(name="TXT", 
            joinColumns=@JoinColumn(name="DATREG_META_CODE", referencedColumnName="TXTHEAD_CODE"),
            inverseJoinColumns=@JoinColumn(name="DATREG_META_CODE"))
    private List<Text> text;

Text.java

@Entity
@Table(name = "TXT")
public class Text {

    @Id
    @Column(name = "TXT_ID")
    private Long id;

    @Column(name = "TXTHEAD_CODE")
    private String code;

因此,我尝试了这种方法(以及其他几种方法),但没有结果。我也不能在数据库中创建联接表,也不想将Lookup绑定到Text类。所以有人可以告诉我是否还有其他方法吗?


问题答案:

我从事JPA工作的圣经是Java Persistence
Wikibook
。它有一个关于单向OneToMany的部分,说明了如何使用@JoinColumn批注进行此操作。就您而言,我想您会想要:

@OneToMany
@JoinColumn(name="TXTHEAD_CODE")
private Set<Text> text;

我使用Set而不是List,因为数据本身没有顺序。

上面使用的是默认值referencedColumnName,与Wikibook中的示例不同。如果这不起作用,请尝试一个明确的方法:

@OneToMany
@JoinColumn(name="TXTHEAD_CODE", referencedColumnName="DATREG_META_CODE")
private Set<Text> text;


 类似资料:
  • 关于JPA中的实体映射,我有以下问题。我有两个实体,第一个是查找,第二个是表示实体翻译的文本。现在我需要将Lookup绑定到文本,但我不希望文本引用Lookup。为了使这种情况更加复杂,文本在此关系中不使用其主键,而是使用列中定义的元码。 所以我尝试了这个(和其他一些变体),但没有结果。我也不能在数据库中创建连接表,我不想绑定查找到我的文本类。谁能告诉我有没有别的办法?

  • 我有三个班,站点,GoupIP和IP 一个站点有一个或多个抱怨。GroupIP有一个或多个IP。 代码如下: 地点 群居 IP 在GroupIp课堂上,我得到: 在属性“ips”中,“映射者”值“groupip”无法解析为目标实体上的属性。 我的代码出了什么问题??

  • 创建从到的OneToMany关系

  • 我看到了一些相关的问题,但我似乎找不到正确的答案,我试图做什么。我有两个表工作和工人,一份工作可以有许多工人,简化的实体 我希望能够获取特定工人的工作列表 我尝试了一些本地和非本地的查询,但现在只尝试使用命名方法,老实说,我想在这里任何有效的方法都应该适用于我的工作回购 我真的不确定如何查询数组属性 在一个工人的输入中。我也尝试查询工人的UUID,因为那是连接表中的内容 JPA创建一个带有两个外键

  • 问题内容: 假设我有两个实体: 然后,我要保留“客户”实体,然后,参照先前添加的“客户”保留“订单”实体。当我从数据库中检索此客户并调用getOrders时,它将返回空集。这是正常行为吗?如果是,当我添加新的Order实体时,我该怎么做以自动刷新此集合? 问题答案: Jpa不会为您维护关系,因此应用程序需要设置双向关系的两端,以使它们与数据库保持同步。当您设置了order-> customer关系

  • 问题内容: 我有一个具有单向一对多关系的类,如下所示: 通常,获取此订单的内容很简单: 但是无论出于何种原因,我都可能希望以某种方式过滤结果并仅以最快的方式检索部分商品集合,例如高于一定价格,低于一定库存的所有商品(不返回然后全部过滤)然后)。为此,我将运行HQL查询以检索特定订单的商品,并将更多内容添加到我的where子句或查询对象中。 凭直觉我会想要这种行为(这是完全错误的): 但是当然这是错