JPA:外键注释

soc*_*ket 23 java orm database-design annotations jpa

我有两个数据库实体:ForumTopic.

Topicprotected long forumId数据成员,当然表示Topic论坛.

我的问题是这个数据成员使用的注释是什么?

Eli*_*les 36

由于论坛有很多主题,并且某个主题属于唯一的论坛,因此您可能希望使用带有@ManyToOne以下注释的论坛类型属性:

@ManyToOne
@JoinColumn(name = "forumId")
private Forum forum;
Run Code Online (Sandbox Code Playgroud)

看更多:

ManyToOneJPA映射

  • 但是在这种情况下的"问题"是,当您将主题序列化为XML或JSON(例如,将其传递给客户端)时,整个Forum对象也将被默认序列化...如果您上传一个主题到你的服务器,你需要传递整个Topic + Forum对象,你不能只使用论坛ID.在某些情况下,手动插入相关实体的外键似乎更容易. (12认同)

Yai*_*sky 5

正如其他人已经回答的那样 -
你应该使用ManyToOneJoinColumn注释.
请记住,既然JPA是关于ORM - 对象关系映射,
你应该引用另一个对象,就像你在Java中"自然地"做的那样 - 即通过一个对象而不是通过它的标识符(在你的情况下是forumId),
这是JPA和Hibernate(之前对JPA)关系之间的设计考虑之一.