我有一个通过ISBN编号映射的Book模型和Inventory模型,但ISBN不是其中的主键。图书属于书店,库存属于一组书店(BookstoreChain)。库存由属于某个BookstoreChain的所有书店共享。
我在图书端使用Hibernate @OneToOne映射,通过加入ISBN专栏来获取库存信息。不知何故,Hibernate正确地生成了左外部连接查询,但Book对象上的inventory为空。它也不是懒加载的。忽略书店和连锁店,如何在获取图书时执行OneToOne或ManyToOne连接并获取库存?
class Book{
@Id
Long id
@Column
String isbn;
@Column
String title;
@OneToOne(optional = true)
@JoinColumn(name = "isbn", referencedColumnName = "isbn",insertable = false, updatable = false)
Inventory inventory;
}
class Inventory{
@Id
Long id
@Column
String chainId
@Column
String isbn
@Column
Long availableQty
}发布于 2009-06-15 18:49:12
您必须将您的连接引用命名为其他名称。isbn已是一列。试试这个:
@OneToOne(optional = true)
@JoinColumn(name = "inventory", referencedColumnName = "isbn",insertable = false, updatable = false)
Inventory inventory;发布于 2009-03-24 01:06:25
我怀疑这与这个问题有任何关系,但我想无论如何我都会提出这个问题,以确保它不会被忽视:
请注意,当对非主键列使用referencedColumnName时,关联的类必须是可序列化的。
参考:[http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html][1]
我知道您说正在生成左外部连接,但我认为如果没有指定默认的fetch,那么它就是惰性的。也许,明确指定fetch模式可能会产生不同的结果。
最后,如果您正在使用HQL查询,那么将其与任何其他实体类一起发布可能会帮助社区帮助解决这个问题。
发布于 2009-06-09 00:16:30
根据这里所显示的内容,您的数据库模式没有任何意义。图书和库存之间的关系应该是一对多的-假设同一本书在几个库存中,这意味着您不能只将图书和库存与isbn相关联。由于isbn在所有库存中不是唯一的,因此您将在库存中有多个具有相同isbn但不同chainIds的行-对于给定的书/isbn,哪一行是正确的行?Book应该有一个指向inventory.id的外键,而不是inventory.isbn。
https://stackoverflow.com/questions/670741
复制相似问题