gpt4 book ai didi

java - 我无法让一对一关系和继承在 Hibernate 中同时工作

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

我是 Hibernate 新手,学习所有不同的注释有时会令人沮丧。目前,我坚持让 Doctor 扩展 Person,并且 Doctor 和 Specialty 之间也有一对一的关系。我已经被这个问题困扰了一段时间,但仍然无法弄清楚。我已经尝试测试这两种关系之一,并且我的代码工作正常,但是当我将所有内容放在一起时,我遇到了问题。

这是我收到的错误:

Exception in thread "main" org.hibernate.MappingException: Could not determine type for: edu.cs157b.medicalSystem.Specialty, at table: Person, for columns: [org.hibernate.mapping.Column(specialty)]

医生:

package edu.cs157b.medicalSystem;

import javax.persistence.*;

@Entity

public class Doctor extends Person {

@OneToOne
@JoinColumn(name = "SPECIALTY_ID")
private Specialty specialty;

private double salary;



public void setSalary(double salary) {
this.salary = salary;
}

public double getSalary() {
return salary;
}

public void setSpecialty(Specialty specialty) {
this.specialty = specialty;
}

public Specialty getspecialty() {
return specialty;
}
}

专长:

package edu.cs157b.medicalSystem;

import javax.persistence.*;

@Entity

public class Specialty {

@OneToOne
private Doctor doctor;

@Id
@GeneratedValue
@Column(name = "SPECIALTY_ID")
private int sId;

private String specialtyTitle;

public void setSId(int sId) {
this.sId = sId;
}

public int getSId() {
return sId;
}

public void setSpecialtyTitle(String specialtyTitle) {
this.specialtyTitle = specialtyTitle;
}

public String getSpecialtyTitle() {
return specialtyTitle;
}

public void setDoctor(Doctor doctor) {
this.doctor = doctor;
}

public Doctor getDoctor() {
return doctor;
}
}

人:

package edu.cs157b.medicalSystem;
import javax.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)

public class Person {

private int personId;
private String first_name;

public Person() {

}

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "PERSON_ID")
public int getPersonId() {
return personId;
}

public void setPersonId(int personId){
this.personId = personId;
}

public void setFirstName(String first_name) {
this.first_name = first_name;
}

public String getFirstName() {
return first_name;
}

}

最佳答案

您的代码中有两个错误。

首先,您在 Person 中注释了 getter,并在其子类 Doctor 中注释了字段。这就是您收到此错误的原因:一旦 Hibernate 在基类中的 getter 上看到 @Id 注释,它只会考虑类层次结构其余部分中 getter 上的注释,而忽略字段上的注释。

其次,您的 OneToOne 双向关联映射不正确。双向关联中的一侧必须始终是相反的一侧。因此,以下字段:

@OneToOne
private Doctor doctor;

应该是

@OneToOne(mappedBy = "specialty")
private Doctor doctor;

通知 JPA Specialty.doctor 关联是已在 Doctor.specialty 中声明和映射的 OneToOne 关联的反面。

关于java - 我无法让一对一关系和继承在 Hibernate 中同时工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22120714/

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