JPA 2 @JoinTable与keygeneration

时间:2013-03-24 13:08:09

标签: jpa persistence jointable

在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,

1 个答案:

答案 0 :(得分:0)

不确定问题究竟是什么,但让我尝试回复。

对于你的第一句话,我会说“是”和“可能”:

  1. 您需要为@Entity class单独Question,并在该类中指定id的映射。

  2. 使用规范JPA无法为列指定自动生成UUID值。有一些方法可以使用OpenJPAHibernateEclipseLink将允许您为此目的创建自定义生成器,事实上,它们的示例是UUID。

  3. 如果你想公开连接表的属性,或者让JPA 管理它们(即id Exams_Questions } table),然后看this external linkfound on this answer)。您最终将从Exam / Question实体到连接表的@OneToMany关系,以及从连接表到Exam / Question实体的@ManyToOne关系。

    将联接表公开为实体将允许您管理单独的密钥(uuid)。如果你不需要 uuid主键,那么不要这样做 - 没有必要解决问题,因为examId / questionId组合是唯一的。