我一直在阅读很多关于@JoinColumn的内容,但我仍然不了解它背后的想法.
病人表
CREATE TABLE patient (
patient_id BIGINT NOT NULL,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
PRIMARY KEY(patient_id));
车辆表
CREATE TABLE vehicles (
patient_id BIGINT NOT NULL,
vehicle_id BIGINT NOT NULL,
vehicle_manufacturer VARCHAR(255),
PRIMARY KEY (vehicle_id),
CONSTRAINT patienthasmanyvehicle FOREIGN KEY(patient_id) REFERENCES patient(patient_id));
患者类
@OnetoMany(mappedBy = "patient")
private Collection<Vehicle> patientVehicles = new ArrayList<Vehicle>();
车辆类
@ManyToOne
@JoinColumn(name="patient_id")
private Patient patient;
我对车辆类如何部分感到困惑,之间的关系是什么
Vehicle Class ---- Entity
@JoinColumn(name="patient_id") ---- annotation
private Patient patient ----field
是吗?车辆实体具有名为patient_id的患者实体的外键.
将patient_id添加为Vehicle Entity表中的列
JoinColumn的name参数应该始终是外键还是主键?
我一直在读这个,但我仍然感到困惑.
JPA JoinColumn vs mappedBy
解决方法:
通过连接表进行单向关联
@Entity
class Patient {
@OnetoMany
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
}
@Entity
class Vehicle {
}
通过连接表进行双向关联
@Entity
class Patient {
@OnetoMany
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
}
@Entity
class Vehicle {
@ManyToOne(fetch = FetchType.LAZY)
private Patient patient;
}
通过外键进行单向关联
@Entity
class Patient {
@OnetoMany
@JoinColumn
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
}
@Entity
class Vehicle {
}
通过外键进行双向关联
@Entity
class Patient {
@OnetoMany(mappedBy = "patient")
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
}
@Entity
class Vehicle {
@ManyToOne(fetch = FetchType.LAZY)
private Patient patient;
}
通过外键与外部列名称规范的双向关联
@Entity
class Patient {
@OnetoMany(mappedBy = "patient")
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
}
@Entity
class Vehicle {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="patient_id")
private Patient patient;
}
这是使用@JoinColumn的基本出发点.
要验证外键(Vehicle表中的patient_id)是否真正映射到Patient表中,您可以使用@JoinColumn(nullable = false)
@Entity
class Vehicle {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="patient_id", nullable = false)
private Patient patient
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。