2012-08-10 150 views
18

我有两个数据库实体:ForumTopicJPA:外键注释

Topicprotected long forumId数据成员,它表明当然Topic的论坛。

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

+0

你不需要在'Topic'中声明'forumId'。 – 2012-08-10 16:50:30

+0

你为什么这么说?我认为这是必要的,因为我必须知道该主题属于哪个论坛 – socksocket 2012-08-10 16:53:03

+1

@socksocket我认为这是因为您可以注释属性'Forum',用'@ JoinColumn'注释指定id,请参阅我的答案。 ;) – elias 2012-08-10 16:54:41

回答

25

由于论坛有很多话题和主题属于独一无二的论坛,你可能想要去与@ManyToOne注释的一个论坛类型属性:

@ManyToOne 
@JoinColumn(name = "forumId") 
private Forum forum; 

查看更多:

ManyToOne and JPA mapping

+5

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

1

@ManyToOne 正如注释所暗示的 - 每个论坛有许多主题

5

正如其他人已经回答 -
您应该使用ManyToOne和JoinColumn注释。
请记住,由于JPA是关于ORM的 - 对象关系映射,
您应该引用另一个对象,就像您在Java中“自然地”完成的那样 - 即通过对象而不是通过其标识符(它是forumId)
这是JPA和Hibernate之间的关系(以前称为JPA)之间的设计考虑因素之一。