Java JPA联接列允许每个值

Java JPA联接列允许每个值,java,jpa,orm,database-relations,Java,Jpa,Orm,Database Relations,我正在测试JPA,在一个简单的案例中,文件/文件版本表(Master/Details),使用OneToMany关系,我有一个问题:在文件版本表中,字段“File_id”(负责与文件表的关系)接受每一个值,而不仅仅是来自文件表的值 我如何使用JPA映射来限制FileVersion.file\u id中的输入仅限于file.id中存在的值 我的类是File和FileVersion: 文件类 这是文件版本表 @Id @GeneratedValue(strategy = GenerationType.I

我正在测试JPA,在一个简单的案例中,文件/文件版本表(Master/Details),使用OneToMany关系,我有一个问题:在文件版本表中,字段“File_id”(负责与文件表的关系)接受每一个值,而不仅仅是来自文件表的值

我如何使用JPA映射来限制
FileVersion.file\u id
中的输入仅限于
file.id
中存在的值

我的类是File和FileVersion:

文件类

这是文件版本表

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="VERSION_ID")
private Long id;

@Column(name="FILENAME", nullable = false, length = 255)
private String fileName;

@Column(name="NOTES", nullable = false, length = 200)
private String notes;

//RELATIONS -------------------------------------------

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="FILE_ID", referencedColumnName="FILE_ID", nullable=false)
private File file;

//-----------------------------------------------------
CREATE TABLE  `JPA-Support`.`FILEVERSION` (
`VERSION_ID` bigint(20) NOT NULL AUTO_INCREMENT,
`FILENAME` varchar(255) NOT NULL,
`NOTES` varchar(200) NOT NULL,
`FILE_ID` bigint(20) NOT NULL,
PRIMARY KEY (`VERSION_ID`),
KEY `FK_FILEVERSION_FILE_ID` (`FILE_ID`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

在Java级别,您描述和注释了类之间的关联——您确实这样做了——并且您的映射看起来很好

在数据库级别,如果要将
file_id
列中的可能值限制为
file
表中的主键值,则应使用约束。为此,您需要使用InnoDB表。诸如此类:

CREATE TABLE  `JPA-Support`.`FILEVERSION` (
`VERSION_ID` bigint(20) NOT NULL AUTO_INCREMENT,
`FILENAME` varchar(255) NOT NULL,
`NOTES` varchar(200) NOT NULL,
`FILE_ID` bigint(20) NOT NULL,
PRIMARY KEY (`VERSION_ID`),
FOREIGN KEY `FK_FILEVERSION_FILE_ID` (`FILE_ID`) REFERENCES FILE(ID)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
文件
也必须使用InnoDB。实际上,对于要使用引用完整性的表,请使用InnoDB表。

谢谢您的帮助

我知道限制输入的SQL约束,但是不需要在数据库中手工编写SQL,就可以使用一些注释来创建此SQL CostRain吗

我是JPA新手,我想使用@JoinColumn注释,JPA也可以创建costraint

再次感谢你

CREATE TABLE  `JPA-Support`.`FILEVERSION` (
`VERSION_ID` bigint(20) NOT NULL AUTO_INCREMENT,
`FILENAME` varchar(255) NOT NULL,
`NOTES` varchar(200) NOT NULL,
`FILE_ID` bigint(20) NOT NULL,
PRIMARY KEY (`VERSION_ID`),
FOREIGN KEY `FK_FILEVERSION_FILE_ID` (`FILE_ID`) REFERENCES FILE(ID)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1