JPA:外键注释
问题描述:
答
由于论坛有很多话题和主题属于独一无二的论坛,你可能想要去与@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
答
@ManyToOne 正如注释所暗示的 - 每个论坛有许多主题
答
正如其他人已经回答 -
您应该使用ManyToOne和JoinColumn注释。
请记住,由于JPA是关于ORM的 - 对象关系映射,
您应该引用另一个对象,就像您在Java中“自然地”完成的那样 - 即通过对象而不是通过其标识符(它是forumId)
这是JPA和Hibernate之间的关系(以前称为JPA)之间的设计考虑因素之一。
你不需要在'Topic'中声明'forumId'。 – 2012-08-10 16:50:30
你为什么这么说?我认为这是必要的,因为我必须知道该主题属于哪个论坛 – socksocket 2012-08-10 16:53:03
@socksocket我认为这是因为您可以注释属性'Forum',用'@ JoinColumn'注释指定id,请参阅我的答案。 ;) – elias 2012-08-10 16:54:41