gpt4 book ai didi

mysql - 选择记录,其中 id 是集合 id 之一

转载 作者:行者123 更新时间:2023-11-29 11:44:17 27 4
gpt4 key购买 nike

在 spring mvc 应用程序中,我有 3 个数据库表(包括一个映射表)及其 2 个相应的 java 实体。

实体是:-

public class User {
private Long id;
private String userName;

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_location",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "location_id", referencedColumnName = "id")}
)
private Set<Location> location;
}

public class Location {
private Long id;
private String locationCode;
}

三个表:users、location 和 user_location。

我想选择一个位置 id 等于特定 id 的用户。由于用户可以有多个位置,我不确定如何为此编写 hibernate 查询。我尝试了下面的几种组合,但我要么得到一个异常(exception),

illegal attempt to dereference collection [{synthetic-alias}{non-qualified-property-ref}] with element property reference [id]

或获取用户和位置对象的列表。我只想要一个用户对象列表。

  • 来自用户,其中 userName = :userName 和 (location.id) 中的 :locationId
  • 来自 User user 内连接 user.location loc,其中 user.userName = :usersName 和 loc.id = :locationId

更新:我尝试查询,

Query query = getCurrentSession().createQuery("from User user inner join user.location loc where user.userName = :usersName and loc.id = :locationId");  

Hibernate 根据上面的查询生成以下纯 SQL 并返回 User 和 Location 对象的列表。例如,如果某个用户有一个位置与上述查询匹配,hibernate 将返回一个包含一个 User 和一个 Location 对象的列表。

select
user0_.id as id1_18_0_,
location2_.id as id1_5_1_,
user0_.user_name as user_na11_18_0_,
location2_.location_code as location3_5_1_
from
users user0_
inner join
user_location location1_
on user0_.id=location1_.user_id
inner join
location location2_
on location1_.location_id=location2_.id
where
user0_.user_name=?
and location2_.id=?

最佳答案

您可以尝试使用下一个标准:

Criteria criteria = getCurrentSession().createCriteria(User.class, "u");
criteria.createAlias("location", "loc");
criteria.add(Restrictions.eq("u.userName", "userName");
criteria.add(Restrictions.eq("loc.id", locationId);

List<User> users = criteria.list();

或者您可以尝试 HQL 类型查询:

TypedQuery<User> query =
getCurrentSession().createQuery("SELECT User.* FROM User u JOIN user_location ul ON u.id = ul.user_id JOIN Location l ON ul.location_id = l.id WHERE u.userName = :userName AND l.id = :locationId", User.class)
.setParameter("userName", "userName")
.setParameter("locationOd", locationId);

List<User> users = query.getResultList();

关于mysql - 选择记录,其中 id 是集合 id 之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35225726/

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