比如有两个表Orders(订单表),orderItem(订单项),我创建的时候只分别建了主键。没建任何外键。 我只在Entity中定义OneToMany 和ManyToOne 等映射关系。这样可以正常查询到映射的对象信息吗?
也就是说,抛开数据库设计规范来说,我的数据库表关系完全依赖jpa映射,而不是依赖数据库表中建立的外键(我没创建任何外键关联,只是在表中建有另外表的主键字段,如orderItem表中有orders_id)。 这样从程序上来说可以正常跑吗?
[b]问题补充:[/b]
这些表是我自己建立的,建立的时候没加外键,只是在实体类里里加映射关系,目的是方便获取相关联的对象。
完全可以的,而且这样不依赖数据库,提高了可移植性
有些级联查询更新删除可能会出问题
你定义了像OneToMany ManyToOne 这样的声明
在JPA中配置成自动生成表 你就能看到了
JPA会根据需要自动给你生成这些外键关联关系的
如果你自己建立这些表,而不加必要的外键,程序当然会有问题
[quote]这些表是我自己建立的,建立的时候没加外键,只是在实体类里里加映射关系,目的是方便获取相关联的对象。 [/quote]
可以不在物理表中加上外键的,你在实体类中增加了外键关联关系,JPA会自动识别出对应的一对多的两个实体类之间具有外键关联关系,所以你的做法是可行的。
也可能和具体的实现有关系
你用的是什么JPA实现?
在你不加外键的情况下,可以获得关联对象的信息么?