java - 休眠关系在注释方式上找不到外键
问题描述
我是新来的休眠尝试精益休眠关系并有拖车表,关系是一对多
create table student(
id bigint primary key auto_increment,
name varchar(20),
student_class_id bigint foreign key references student_class(id)
)
create table student_class(
id bigint primary key auto_increment,
name varchar(20)
)
spring sessionFactory bean 已配置 packageToScan 实体
这是实体类:
@Table(name = "students")
@Entity
public class Student {
private Integer id;
private Integer name;
private StudentClass studentClass;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name")
public Integer getName() {
return name;
}
public void setName(Integer name) {
this.name = name;
}
@OneToOne
@JoinColumn(name = "student_class_id")
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
public StudentClass getStudentClass() {
return studentClass;
}
// setter getter
}
@Entity
@Table(name = "student_class")
public class StudentClass {
private Integer id;
private String name;
private Set<Student> students = new HashSet<Student>();
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@OneToMany(mappedBy = "studentClass", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
public Set<Student> getStudents() {
return students;
}
/setter getter
}
sql是:select sc.name from StudentClass sc left join Student s on sc.id = s.student_class_id
和junit测试发现错误
[DEBUG] 2018-05-26 11:59:39.993 [main] HqlSqlBaseWalker - select << begin [level=1, statement=select]
[DEBUG] 2018-05-26 11:59:40.005 [main] FromElement - FromClause{level=1} : com.f.pojo.StudentClass (sc) -> studentcla0_
[DEBUG] 2018-05-26 11:59:40.009 [main] HqlSqlWalker - Creating entity-join FromElement [s -> com.f.pojo.Student]
[DEBUG] 2018-05-26 11:59:40.010 [main] FromElement - FromClause{level=1} : com.f.pojo.Student (s) -> student1_
[DEBUG] 2018-05-26 11:59:40.012 [main] FromReferenceNode - Resolved : sc -> studentcla0_.id
[DEBUG] 2018-05-26 11:59:40.013 [main] DotNode - getDataType() : id -> org.hibernate.type.IntegerType@26a2f7f9
[DEBUG] 2018-05-26 11:59:40.013 [main] FromReferenceNode - Resolved : sc.id -> studentcla0_.id
[DEBUG] 2018-05-26 11:59:40.013 [main] FromReferenceNode - Resolved : s -> student1_.id
[ERROR] 2018-05-26 11:59:40.016 [main] ErrorTracker - could not resolve property: student_class_id of: com.f.pojo.Student
[ERROR] 2018-05-26 11:59:40.016 [main] ErrorTracker - could not resolve property: student_class_id of: com.f.pojo.Studentcker - could not resolve property: student_class_id of: com.f.pojo.Student
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: could not resolve property: student_class_id of: com.f.pojo.Student [select sc.name from com.f.pojo.StudentClass sc left join com.f.pojo.Student s on sc.id = s.student_class_id]
我是两个实体关系好像是对的,学生实体使用studentClass
属性引用studentClass
实体
解决方案
你的 SQL:
create table student(
你的班:
@Table(name = "students")
这些名称需要匹配。即使是单个字符也会产生很大的不同。
SQL 中的另一个问题:
name varchar(20),
你的班:
private Integer name;
类型也需要匹配。我相信您的意思是在您的课程中使用 String 而不是 Integer。
推荐阅读
- python - RP4 上的 MCP4728 和 Python
- bitmap - E/AndroidRuntime:致命异常:线程 2 进程:com.example.imagepro,PID:10336 java.lang.ArrayIndexOutOfBoundsException
- css - 如何在引导轮播中对齐左侧图像
- python-telegram-bot - 如何通过 UserID 获取电报用户信息?
- vue.js - Vue.js 上不允许 Axios Post 返回 405 方法
- python - 从类 Tkinter 中调用 filedialog
- oracle - Oracle:在每次更新行时更改修改列的时间戳
- ruby-on-rails - 使用 ruby on rails 创建博客应用程序。当我尝试生成设计时出现错误
- java - Java问题:一个类的实例作为这个类的静态成员
- python - 在 Windows 上提交容器会破坏 python 代码