English 中文(简体)
ORM: OneToOne非键的连接列映射——书和库存由ISBN映射
原标题:
  • 时间:2009-03-22 09:12:29
  •  标签:

我有一本书模型和库存模型映射到ISBN号,但ISBN不是主键。书属于书店和库存是一群书店(BookstoreChain)。库存是由所有书店属于BookstoreChain共享。

我使用Hibernate @OneToOne映射书一边通过加入ISBN列获取库存信息。不知何故,Hibernate生成左外连接查询正确,但库存书对象为空。它不是懒加载。忽略了连锁书店,我怎么做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
}
问题回答

你的名字加入参考别的东西。isbn已经是一个列。试试这个:

@OneToOne(optional = true)
@JoinColumn(name = "inventory", referencedColumnName = "isbn",insertable = false, updatable = false)
Inventory inventory;

我怀疑这与这个问题,但我想把它无论如何只是为了确保它不被忽视了的问题:

Note that when using referencedColumnName to a non primary key column, the associated class has to be Serializable.

参考:[< a href = " http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html] [1]“rel = " nofollow noreferrer " > http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html] [1] < / >

我知道你说左外连接生成,但我认为默认获取是懒惰的,如果不指定。也许,explicilty指定获取模式可能产生不同的结果。

最后,如果您正在使用HQL查询,发布,与任何其他实体类可能会帮助社区帮助解决问题。

数据库模式并t意义,基于你所示。书和库存之间的关系应该是很多,大概相同的书是在几个库存,这意味着您可以与isbn t副书和库存。自从isbn在库存并不是唯一的,你会有多个行库存同样的isbn但不同chainIds——这行是正确的行/ isbn对于一个给定的书?书应该有库存的外键。id,而不是inventory.isbn。

只是一个猜想:name = ISBN需要相同的情况在库存?





相关问题
热门标签