在JPA 2中是否有办法使用@JoinTable为行的id生成UUID密钥?我不想为这个表创建新实体(即使这样可以解决问题),我也不想从数据库中创建它。
@ManyToMany
@JoinTable(name="Exams_Questions", schema="relation",
joinColumns = @JoinColumn(name="examId", referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name="questionId", referencedColumnName = "id"))
private List<Question> questions = new ArrayList<Question>();
db table
CREATE TABLE [relation].[Exams_Questions](
[id] [uniqueidentifier] PRIMARY KEY NOT NULL,
[examId] [uniqueidentifier] NOT NULL,
[questionId] [uniqueidentifier] NOT NULL,
答案 0 :(得分:0)
不确定问题究竟是什么,但让我尝试回复。
对于你的第一句话,我会说“是”和“可能”:
您需要为@Entity class
单独Question
,并在该类中指定id
的映射。
使用规范JPA无法为列指定自动生成UUID值。有一些方法可以使用OpenJPA和Hibernate。 EclipseLink将允许您为此目的创建自定义生成器,事实上,它们的示例是UUID。
如果你想公开连接表的属性,或者让JPA 管理它们(即id
Exams_Questions
} table),然后看this external link(found on this answer)。您最终将从Exam / Question实体到连接表的@OneToMany关系,以及从连接表到Exam / Question实体的@ManyToOne关系。
将联接表公开为实体将允许您管理单独的密钥(uuid)。如果你不需要 uuid主键,那么不要这样做 - 没有必要解决问题,因为examId / questionId组合是唯一的。