gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:10:23 25 4
gpt4 key购买 nike

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

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

我的理解是,对于复合主键 - 您需要使用 @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注释

我很困惑为什么它能编译并工作?谢谢阿基拉

最佳答案

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

5.1.2.1.2. Multiple id properties without identifier type

Another, arguably more natural, approach is to place @Id on multiple properties of your entity. This approach is only supported by Hibernate (not JPA compliant) but does not require an extra embeddable component.

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e4819

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

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

关于hibernate - 对同一类中的多个字段使用@Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19813372/

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