微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 什么是@JoinColumn以及如何在Hibernate中使用它

我一直在阅读很多关于@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 举报,一经查实,本站将立刻删除。

相关推荐