- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 hibernate 并遇到了以下问题
有两个表
CREATE TABLE department (
department_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
caption varchar(255) DEFAULT NULL) ENGINE=InnoDB;
CREATE TABLE employee (
employee_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
fio varchar(255) DEFAULT NULL,
fk_department_id int(11) NOT NULL,
FOREIGN KEY (fk_department_id) REFERENCES department (department_id)
) ENGINE=InnoDB ;
和两个类(在第一个类中注释掉的代码看起来像工作解决方案)
@Entity
@Table(name = "department")
public class Department {
....
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "employee", joinColumns = {
@JoinColumn(name = "fk_department_id", referencedColumnName = "department_id") })
/*
* @OneToMany(fetch = FetchType.LAZY, mappedBy = "department", cascade =
* CascadeType.ALL)
*/
public Set<Employee> getEmployies() {
return employees;
}
<小时/>
@Entity
@Table(name = "employee")
public class Employee {
......
@ManyToOne
@JoinColumn(name = "fk_department_id")
public Department getDepartment() {
return department;
}
这会导致
INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
Exception in thread "main" org.hibernate.MappingException: Foreign key (FK3cspe1b06hmsik5l8y1i11xmd:employee [employies_employee_id])) must have same number of columns as the referenced primary key (employee [fk_department_id,employies_employee_id])
at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:148)
at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:130)
请帮助我理解为什么这不起作用
最佳答案
以下内容应该可以正常工作。您会注意到我没有指定任何连接列关系,因为我允许 Hibernate 自动为我生成这些关系。
@Entity
public class Department {
@OneToMany
@JoinTable(name = "department_employees")
private List<Employee> employees;
}
@Entity
public class Employee {
@ManyToOne
private Department department;
}
但是假设您想要明确连接列。
@Entity
public class Department {
@Id
@Column(name = "department_id")
private Integer id;
@OneToMany
@JoinTable(
name = "department_employees",
joinColumns = @JoinColumn(name = "department_id"),
inverseJoinColumns = @JoinColumn(name = "employee_id"))
private List<Employee> employees;
}
@Entity
public class Employee {
@Id
@Column(name = "employee_id")
private Integer id;
@ManyToOne
@JoinTable(
name = "department_employees",
joinColumns = @JoinColumn(name = "department_id", insertable = false, updatable = false),
inverseJoinColumns = @JoinColumn(name = "employee_id", insertable = false, updatable = false))
private Department department;
}
从中得出的要点是:
Department
之间关系的中间表。和Employee
实体。它不应该指Employee
表如您的代码所示。joinColumns
attribute 表示包含实体的主键属性,在本例中为 Department
,因此我使用 department_id
.inverseColumns
attribute 表示关联实体的主键属性,在本例中为 Employee
,因此我使用 employee_id
.更新:
如果您想消除 @JoinTable
并仅维持 Department
之间的关系和Employee
,您可以按如下方式更改映射:
@Entity
public class Department {
@OneToMany(mappedBy = "department")
private List<Employee> employees;
}
@Entity
public class Employee {
@ManyToOne
private Department department;
}
希望有帮助。
关于java - 尝试了解 @JoinTable 和 @JoinColumn 的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39040029/
尝试实现 this question 的解决方案我想知道,在使用 @JoinTable 注释时有什么方法可以使用 WHERE 子句。如果您查看问题(只需跳到表格布局),我会将这两个表格与 USER_I
这是我的示例数据模型 我已经声明了以下类: @Entity({ name: 'user' }) export class User { @Column({ type: 'int4' })
如果一个域类具有复合 id,grails/gorm 似乎会忽略多对多关系连接表上的列名,例如: class Following implements Serializable { ...
我正在尝试使用 JPA 理解 @JoinTable 对 @OneToMany 关系的理解。我有上面的关系: CLIENT public class Client { @Id @Colu
如何使用@JoinTable连接三个表? 我有三个表: user: id, name post: id, date company: id, name 我想创建一个包含以下列的新表: user_id,
使用 JPA/Hibernate 3.6/DB2。 我有以下异常:Caused by: org.hibernate.AnnotationException: SecondaryTable JoinCo
我在hibernate中理解了@joincolumn。现在我开始使用@JoinTable。以下是我的 POJO @Entity @Table(name = "person") public class
我目前正在开发一个有 2 个表的应用程序。用户和团队。用户将 UserId 作为 PK 和 UserPassword。 Team 表将 TeamId 作为 PK 和 TeamName。 最初我只有一个
如何创建高效的 JPA Criteria 查询以仅在连接表中存在实体时选择实体列表?以下面三个表为例: create table user (user_id int, lastname varchar
嗨,我遇到了 JPA 速度慢的问题。使用 jps 映射队列模型、队列快照和事件。 这是我的实体: @Entity @Table(name = "cmEvent") public class Event
我使用的是 MySQL 5.5、JPA 2.0 和 Hibernate 4.1.0.Final。我的实体中有这个字段...... @Entity @Table(name = "teacher",
我在媒体和标签之间有多对多的关系: 中等: @ManyToMany(fetch=FetchType.EAGER) @IndexColumn(name="tags_index_column") @Joi
我正在尝试在 Hibernate 中运行一个简单的 JoinTable 操作,它让我感到不舒服。我有一张表代表一个名为“Person”的实体。我有另一个代表社会安全号码的表(例如)。我希望将社会安全号
我已经阅读了很多文章和文档,并且一定缺少一些内容。 在我的应用程序(下面的模型)中,我遇到了一个数据问题,这似乎超出了我的控制范围,在联接表JOBORDERCATEGORIES中有一个category
我的模型(示例)如下: CREATE TABLE person ( id INT PRIMARY KEY, name TEXT ... ); CREATE TABLE team ( i
我有以下两个实体和一个连接表: 实体: @Entity @Table(name = "PERSON") public class parent { @OneToOne(mappedBy="person
我有一个 Tag 类,它使用 TagStatus 连接表存储对状态集的引用,目前系统中没有它的实体 package com.iit.awt.application.domain; import jav
我正在尝试创建一个调查。该调查由一系列问题组成。每个问题又由答案值的集合组成。 我已将问题与调查联系起来,如下所示: @OneToMany() @JoinTable( name = "
我有 3 个表: 业务角色 标识符 姓名 BusinessRole_ActorType(链接表) 角色标识符 actorType_identifier Actor 类型 标识符 名称(varchar)
我花了几个小时四处搜索,但没有发现任何与我的情况相似的东西。 让我们假设遵循多对多数据模型: Contract (any business entity)- contract_id- other fi
我是一名优秀的程序员,十分优秀!