java - ORM:非主键连接列上的 OneToOne 映射 - ISBN 映射的书籍和库存

标签 java hibernate orm activerecord one-to-one

我有一个由 ISBN 号映射的 Book 模型和 Inventory 模型,但 ISBN 都不是其中的主键。书籍属于书店,库存是一组书店(BookstoreChain)。库存由属于 BookstoreChain 的所有书店共享。

我在书端使用 Hibernate @OneToOne 映射通过加入 ISBN 列来获取库存信息。 Hibernate 以某种方式正确生成了左外连接查询,但 Book 对象上的 inventory 为空。它也不是惰性加载的。忽略 Bookstore 和 Chain,如何在获取书籍时进行 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;

关于java - ORM:非主键连接列上的 OneToOne 映射 - ISBN 映射的书籍和库存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/670741/

相关文章:

java - 是否可以使用 JRE 作为标准 VM 来实例化 Java 编译器?

java - 将参数传递给 neo4j 密码查询

java - JPA @NamedQuery 有两个表

java - hql查询获取最近1个月的记录

asp.net-mvc - 在使用 ASP.NET MVC 和 ORM 解决方案时,我们是否需要使用存储库模式?

java - 将对象保存到文件而不重复

java - Eclipse 插件 - 延迟写入控制台

java - Infinispan 软索引文件存储问题

mysql - 只读副本的序列化连接,如何连接到不同的端口?

python - Django:跨三个模型进行注释