【发布时间】:2017-09-15 07:37:58
【问题描述】:
总的来说,我是 Spring 和 Java 中的 Web 开发的新手。
我阅读了 Hibernate/JPA 2.0 文档,我知道在注释中
@OrderColumn 有一个参数name。
@OrderColumn(name = "name_of_the_column_that_we_would_like_to_order")我们的收藏。
但是,我还看到了一些其他名称 - 例如pos 和 nbr。我猜这些建议应该按表中的位置或按数字(nbr)或按 ID 或其他东西排序,不幸的是我找不到确切的答案,只有一些没有数据库示例的示例。
编辑:另外,如果有任何其他类似于此 pos 和 nbr 的示例,很高兴分享。我猜 nbr 和 pos 是一些保留字,jpa 知道它应该如何接收和订购数据。
EDIT2:
@Entity
@Table(name = "问题") 公共课问题{
/**
* serialVersionUID
*/
private static final long serialVersionUID = -7677167590736866885L;
/**
* Content of the question
*/
@Column(nullable = false, length = 255)
@Pattern(regexp = "^(?=\\s*\\S).*$")
private String content;
/**
* Possible answers to the question
*/
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "question_answer", joinColumns = @JoinColumn(name =
"question_id"))
@OrderColumn(name = "nbr")
@Valid
private List<Answer> answers;
/**
* Category of the question
*/
@ManyToOne(optional = true)
@JoinColumn(name = "category_id", nullable = true)
private Category category;
注意这部分:
/**
* Possible answers to the question
*/
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "question_answer", joinColumns = @JoinColumn(name =
"question_id"))
@OrderColumn(name = "nbr")
@Valid
private List<Answer> answers;
但是,在基础中没有名为 nbr 的列。
这是问题表的图片
这是答案表的图片
category_id是外键,本题所属类别的ID。
【问题讨论】:
-
和“答案”是什么?一个实体?任何老班?订单列由您的 JPA 提供商生成。 “question_answer”表在哪里?包含列表的那个!!!
-
Answer 显然是一个实体。没有 question_answer 表,因为它不是
ManyToMany关系。 -
如果某物是一个实体,那么你不能使用
@ElementCollection(显然),你可以使用@OneToMany或@ManyToMany(和@JoinTable而不是@CollectionTable)。是的,因为您在元数据中指定了该表! -
答案是一个实体。它在db中有自己的表,但它不是独立的,它是
@Embeddable,因为如果没有它所属的问题,答案就不存在。 -
无论哪种方式,JOIN TABLE 都存在,因为那是元素嵌入的表。
@Embeddable没有自己的表
标签: java spring hibernate jpa spring-data-jpa