【问题标题】:JPA 2 : Implicit column reference in the @MapsId mapping failsJPA 2:@MapsId 映射中的隐式列引用失败
【发布时间】:2013-01-16 12:36:06
【问题描述】:

我尝试使用多个映射属性。但是当我尝试运行代码时,代码会产生异常,这个例子是基于 Pro JPA 2,第 10 章的书。有以下代码:

DeptID.java

public class DeptId implements Serializable{

private static final long serialVersionUID = 5177373337405448966L;
private int number;
private String country;
    .....................

ProjectId.java

public class ProjectId implements Serializable{

private static final long serialVersionUID = 4239980609226293562L;
private String name;
private DeptId deptId;
.....................

Department.java

@Entity
@IdClass(DeptId.class)
public class Department implements Serializable {

private static final long serialVersionUID = 1L;
@Id
private int number;
@Id
private String country;
private String name;

@OneToMany(mappedBy="deptId")
List<Project> projects;
    ......................

Project.java

@Entity
@IdClass(ProjectId.class)
public class Project implements Serializable {

private static final long serialVersionUID = 1L;
@Id
private String name;

@Id
@ManyToOne
@JoinColumn(name="dept_id")
private Department deptId;
    ........................

此代码将生成以下异常

Caused by: org.hibernate.AnnotationException: Implicit column reference in the @MapsId mapping fails, try to use explicit referenceColumnNames: example.domain.Department

【问题讨论】:

    标签: java hibernate annotations jpa-2.0


    【解决方案1】:

    DeptID 有两个主键,所以你不能有 @JoinColumn(name="dept_id") 这样的东西。相反,使用这个:

    @JoinColumns({
        @JoinColumn(name="dept_number", referencedColumnName="number"),
        @JoinColumn(name="dept_country", referencedColumnName="country")
    })
    

    如果这仍然不起作用:在主键类(DeptID 和 ProjectId)中尝试切换到公共或保护私有属性。还要检查它们是否有一个没有参数的构造函数并实现了 equals 和 hashcode 方法。

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 2020-02-15
      • 2018-05-31
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多