gpt4 book ai didi

java - 一对多:让 Hibernate 选择引用的 id 而不是加入它

转载 作者:行者123 更新时间:2023-12-02 00:38:11 24 4
gpt4 key购买 nike

我使用 Hibernate 在数据库中存储了两个类。我们将它们称为ContainerItem。 Item 与 Container 具有一对多关系:

@entity(name = "containers")
public class Container {
@Id
@GeneratedValue
private long id;
}

@entity(name = "items")
public class Item {
@Id
@GeneratedValue
private long id;

@ManyToOne
@JoinColumn(name = "container_id")
private Container container;
}

我想为元组 [ (long)item.id, (long)item.container_id ] 的所有项目选择全选,但 Hibernate 似乎坚持检索 [ (long) )item.id, (Container)item.container],引入无用(且昂贵)的连接。

我尝试了该条件查询:

Criteria criteria = session.
createCriteria(Link.class).
add(Restrictions.isNotNull("container")).
setProjection(Projections.projectionList().
add(Projections.id()).
add(Projections.property("container")));

是否有匹配条件查询。没有 HQL 查询或 native SQL 查询就必须可以实现,不是吗?

编辑 1:工作 HQL 查询:

session.createQuery("SELECT item.id, item.container.id " +
"FROM items AS item " +
"WHERE item.container <> NULL")

编辑 2: FetchType.LAZY 不是一个选项。

最佳答案

Criteria criteria = session.createCriteria(Link.class);
criteria.createAlias("container", "containerAlias");
criteria.add(Restrictions.isNotNull("containerAlias.id"));
criteria.setProjection(Projections.projectionList()
.add(Projections.id())
.add(Projections.property("containerAlias.id")));

关于java - 一对多:让 Hibernate 选择引用的 id 而不是加入它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7196611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com