我是JPA的新手。我希望我的两张牌桌有1米的关系。我看到很多例子都有类似于收容的东西。例如,如果我有两个表User和Blog,那么类User将有一个私有字段命名Collection。
我感兴趣的是,我可以创建类似于集合blogId(在User类中),而不是存储整个对象,而这个blogId会引用Blog中的主键吗?
感谢
答案 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将使用另一个查询加载所需的数据。