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

对同一类中的多个字段使用@Id

昝唯
2023-03-14
问题内容

我是Hibernate的新手,必须支持使用Hibernate的现有应用程序。这是一个纯报表应用程序-无需插入/更新/删除-仅选择

我可以看到在同一类的多个字段中使用了@Id注释的现有POJO对象

我的理解是,对于复合主键-您需要使用@Embeddable和@EmbeddedId

但是,这没有在我的课程中定义,奇怪的是代码可以编译并正常运行

这是我的代码的示例:

package com.xyz.vo;

import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@Entity(name="com.xyz.vo.Emp")
@Table(name = "TEmployee")
public class Emp implements Serializable    {
private java.lang.Integer  empId;
@Id 
@Column(name = "EMP_ID")   
public java.lang.Integer  getEmpId(){   
    return this.empId;
}

public  void  setEmpId(java.lang.Integer empId){    
    this.empId=empId;
}

private java.lang.Integer  empAge;
@Id 
@Column(name = "EMP_AGE")   
public java.lang.Integer  getEmpAge(){  
    return this.empAge;
}

    public  void  setEmpAge(java.lang.Integer empAge){  
    this.empAge=empAge;
}

    private String empName;
    @Column(name = "EMP_NAME")   
public String  getEmpName(){    
    return this.empName;
}

    public  void  setEmpName(String empName){   
    this.empName=empName;
}

在pojo中还有更多字段-没有定义@Id

注意-这两个字段具有@Id批注

我很困惑为什么它可以编译和工作?谢谢akila


问题答案:

根据Hibernate文档,Hibernate似乎允许这样做,但是它不符合JPA。

5.1.2.1.2。没有标识符类型的多个id属性

另一种可能更自然的方法是将@Id放在实体的多个属性上。Hibernate仅支持此方法(不符合JPA),而不需要额外的可嵌入组件。

http://docs.jboss.org/hibernate/core/3.6/reference/zh-
CN/html_single/#d0e4819

对于符合JPA的解决方案,您必须为此设置指定其他@IDClass(或使用EmbeddedId):

http://www.objectdb.com/java/jpa/entity/id



 类似资料:
  • 我有这个问题。但我很难解释,因为我不知道确切的术语。希望有人能理解。我会尽力描述。我觉得这与

  • 问题内容: 请忘记设计。我知道OOP指定私有对象是该类的私有对象。我的问题是,为什么将OOP设计为使私有字段具有类级别的访问权限而不具有对象级别的访问权限? 问题答案: private修饰符强制执行封装原理。 这个想法是,“外部世界”不应更改Person内部流程,因为Person的实现可能会随时间而变化(并且你将不得不更改整个外部世界以解决实现方面的差异-这几乎是不可能的)。 当Person实例访

  • 我可以重写,以便它将其数据存储在map中,但这意味着每个方法还需要传递另一个参数。变成,变成,看起来太难看了。操作还需要传递。 据我所知,另一种方法是创建一个存储库,它将管理的数据,并调用操作来重新初始化它。 这种方法的问题是,如果我们有两个(A和B),并且活动容器是A,因此包含在A中呈现的项,容器B仍然会监听的更改。如果检查是方法中的活动容器,我可以添加检查,但我不确定应该这样做。

  • 所有东西看起来都是等级的,但看起来像是在两个领域注入了相同的对象或类似这样的东西。当我试图为一个字段使用When(..).thenreturn()时,它设置了两个数据,另一个数据和vise verse;最奇怪的是,它在调试模式下运行良好。你能说什么?

  • 考虑以下POJO: 使用MapSTRt,我创建了一个映射器,将映射到。由于“业务”“逻辑”,我需要将和约束为的和字段值。这是我使用另一个类得出的结论: 有没有其他方法可以实现这一点(即另一种映射器、装饰器等)?如何将多个值(xml附表、讲座)传递给映射器?

  • 我把这三门课分别放在不同的文件中 我有下面的映射器 这目前仅映射lastName并起作用,我想将Book中的作者字符串映射为 我怎么能这么做?我在MapStruct文档中找不到任何东西。