让我们考虑一下这个图
使用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”)的曲目时;我收到一个RuntimeError,指出该类型中不存在该键。
有什么方法可以避免创建类型类,首先坚持类型,最后坚持轨道?
答案 0 :(得分:1)
基本上,FKey约束的工作方式是,如果您尝试在父表中不存在FKey值的子表中插入值,则它将失败。这不是JPA特有的。这就是关系数据库的设计方式。