当前位置: 首页 > 知识库问答 >
问题:

如何在Hibernate中通过不同名称的非PK列映射2个表

尉迟冯浩
2023-03-14
@Entity
@Table(name = "PLANS_T")
public class Plans {
    private Integer id; // PK
    //...
    private String secondaryIdentifier; // Should be matched with TRAINEES.auxiliaryIdentifier
    //...
}

@Entity
@Table(name = "TRAINEES_T")
public class Trainee {    
    private Integer id; // PK
    //...
    private String auxiliaryIdentifier; // Should be matched with PLANS.secondaryIdentifier
}

但是我不能用典型的例子。

@Entity
class Trainee {

    @OneToMany(mappedBy = "plan")
    private Collection<Plans> plans = new ArrayList<Plans>();

}

@Entity
class Plans {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="auxiliary_identifier") // Where do I specify "secondaryIdentifier", a non-PK column?
    private Trainee trainee;

}

我需要一种方法在注释中指定两个非PK列。使用条件API时,这些注释提供了创建联接路径的路径。

共有1个答案

田德馨
2023-03-14

您应该按照以下方式更正您的映射:

@Entity
class Trainee {

   @OneToMany(mappedBy = "trainee")
   private List<Plans> plans = new ArrayList<Plans>();
}

@Entity
class Plans {

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name="secondary_identifier", referencedColumnName = "auxiliary_identifier")
   private Trainee trainee;

}

>

  • @OneTomanyMappedBy是拥有该关系的字段的名称。这是plans实体的trainee字段。

    @JoinColumnreferencedColumnName是此外键列引用的列的名称。

  •  类似资料:
    • 问题内容: 我目前有以下环绕存储过程的命名查询:- 列和是存储过程返回的确切列名。我创建了一个包含相同列名的bean,以便可以将查询的结果映射到该bean中。 调用命名查询并将结果映射到Bean的Hibernate代码: 所有这些都可以正常工作,但是我不想依赖存储过程中的列名,而是想在中使用自己的列名,例如: 如何在上面的命名查询中将列名与存储过程的列相对应? 谢谢。 更新 -我在下面添加了最终解

    • 我希望以以下方式映射实体: 我有一个用户,他买了一辆车(特定的品牌、型号和变体)。 为此,我创建了以下类。 Car.java汽车 CarModel.java 汽车变体.java 最后,用户.java 现在,我的问题是。 在现实生活中,用户可能拥有许多汽车,每辆汽车都有特定的品牌、型号和变体。我想用JPA / Hibernate实现这样的功能。 我可以定义与和的关系。在这种情况下,如果我执行或我最终

    • 我有两个数据。表X和表Y。 列 X: Y 中的值列: 创建两个data.tables: 我设置了 X 和 Y 的键: 现在,我尝试通过X中的< code>id和Y中的< code>ID来连接X和Y: All引发错误,指出参数中的列名无效。 我查阅了data.table的手册,发现< code>merge函数不支持< code>by.x和< code>by.y参数。 如何在不更改列名的情况下通过不同

    • 问题内容: Jackson json注释中以下jax-b注释的等效方式是什么? 我需要生成json而不是xml,并且需要了解在jax-b中等效表示的常规jackson批注。 重命名字段。 使用getter代替字段。 如果json / xml元素名称是Java保留字(例如“ ”,“ ”,“ ”等),则这些功能尤其重要。 因此我们必须将POJO字段分别命名为“ new ”,“ _ public ”,“

    • 我知道Struts2使用拦截器自动映射请求参数到动作类字段。但如果我想将一个参数映射到一个具有不同名称的操作字段,该怎么办。我想我有 如果我想将此映射到下面的字段 我怎么做这个映射。我能用吗 如果是的话,我如何在action类中获取请求对象?此外,它是否可以在带有OGNL表达式或的JSP页面中工作?在struts2配置中有没有其他方法来做这种映射?

    • 我的谷歌页面上有几个栏目。列数随时间变化(将来可能会添加新列)。如果我的床单看起来像这样,我想得到一张地图或类似的东西: 查看我的工作表 API调用的响应: 换句话说,我想在api响应的工作表中获取列名及其标签。或者,任何类似的方法也会起作用。我不知道该做什么API调用。我知道调用,但我不知道如何获取此表中列的标签。我只能得到一定范围内的数据。我不知道如何获得列的标签。