让我们考虑一下这个图表
使用 Track 类的 JPA 片段。
@Entity
@Table(name = "track")
public class Track {
@Id
@Type(type="pg-uuid")
private UUID id;
@Column(name = "genre")
private String genre;
/* Getters, setters, etc */
}
以及数据库架构
/** Liquibase */
<changeSet id="1" author="SoulBeaver">
<createTable tableName="genre">
<column name="name" type="VARCHAR(1024)">
<constraints primaryKey="true" nullable="false" />
</column>
</createTable>
<createTable tableName="track">
<column name="id" type="UUID">
<constraints primaryKey="true" nullable="false" />
</column>
<column name="genre" type="VARCHAR(1024)" />
</createTable>
<addForeignKeyConstraint baseTableName="track" baseColumnNames="genre" constraintName="genre_fk"
referencedTableName="genre"
referencedColumnNames="name" />
</changeSet>
现在,当我尝试保留已被赋予 track.setGenre("Rock"); 的轨道时我收到一个运行时错误,指出该 key 在流派中不存在。
有什么方法可以避免创建 Genre 类,首先保留 Genre,最后保留 Track?
最佳答案
基本上,FKey 约束的工作方式是,如果您尝试在父表中不存在 FKey 值的子表中插入值,则会失败。这不是 JPA 特有的。这就是关系型数据库的设计方式。
关于java - 间接插入命名表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789141/