在JPA中实现m-m或1-m关系

时间:2015-12-24 14:40:43

标签: java jpa

我是JPA的新手。我希望我的两张牌桌有1米的关系。我看到很多例子都有类似于收容的东西。例如,如果我有两个表User和Blog,那么类User将有一个私有字段命名Collection。

我感兴趣的是,我可以创建类似于集合blogId(在User类中),而不是存储整个对象,而这个blogId会引用Blog中的主键吗?

感谢

2 个答案:

答案 0 :(得分:2)

JPA(或其他ORM框架)应该让您考虑它们之间的对象和关系,而不是表和外键。我认为你不想做你要问的事。

User实体应包含Blog个实体的集合,如果您希望以字段user的形式向用户提供引用。但这取决于您和您的需求。如果您开始使用包含foreign keys而不是对象引用的字段创建实体,则您误解了ORM正在尝试为您解决的一些概念。您还将失去JPA为您提供的一些功能和功能,例如您可能想要的级联更新,提取等。您还可以使用注释来决定是否要在" many-side"上使用外键列。或者如果你想使用连接表。

在您的基础表中,如果您不使用ORM,您通常会拥有外键。您通常使用JPA注释来更改默认外键列名JPA,除非您已经有一个表方案,或者您对JPA使用的命名约定不满意。

此链接应为您提供有关JPA中一对多关系的足够信息。 https://en.wikibooks.org/wiki/Java_Persistence/OneToMany

答案 1 :(得分:0)

做你想做的我建议是这样的:

class User{
...
@JoinColumn(name = "id", referencedColumnName = "id")
@OneToMany(fetch = FetchType.LAZY, optional = false)
private List<Blog> blogs;
...
}

这就是为什么JPA不会加载整个blogs;相反,它将按需加载。例如当你这样做时blogs.get(0).getOtherField() JPA将使用另一个查询加载所需的数据。