gpt4 book ai didi

java - 对包含的实体执行类似查询

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:38 26 4
gpt4 key购买 nike

我有两张 table ;人和宠物。

PERSON_ID  PERSON_NAME  FAVORITE_PET
1, Ryan, 1

宠物

PET_ID  PET_NAME    
1, Binky

一个人可能有也可能没有最喜欢的宠物。

我想返回所有拥有最喜欢的宠物(名字如“binky”)的人。

在 SQL 中我会执行以下操作:-

SELECT *
FROM people people, pets pet
WHERE people.favorite_pet = pet.pet_id
AND pet.pet_name LIKE 'binky';

我已经在下面映射了我的类:-

人员类别

@Entity
@Table( name = "people" )
public class Person implements Serializable {

@Id @Column( name = "person_id" ) private long personId;
@Column( name = "person_name" ) private long personName;
@JoinColumn( name = "favorite_pet" ) @ManyToOne private Pet favoritePet;

}

宠物类

@Entity
@Table( name = "pets" )
public class Pet implements Serializable {

@Id @Column( name = "pet_id" ) private long petId;
@Column( name = "pet_name" ) private String petName;

}

要返回等效查询,我希望执行以下 DetachedCriteria:-

DetachedCriteria criteria = DetachedCriteria.forClass( Person.class );
criteria.add( Restrictions.like( "favoritePet.petName", "binky" ) );

但是,当我这样做时,我收到以下错误:-

org.hibernate.QueryException: could not resolve property: favoritePet.petName of: 
com.test.Person

使用限制进行此类查询的正确方法是什么?

最佳答案

我不知道为什么您使用 Criteria API 来进行如此简单的静态查询,而不是简单的 HQL 查询:

select person from Person person where person.favoritePet.name like :name

这创建了一个隐式内部联接,相当于

select person from Person person
inner join person.favoritePet pet
where pet.name like :name

因此,如果您(确实)想使用条件查询来执行此操作,那么您还需要一个 joi:

Criteria c = session.createCriteria(Person.class, "person");
c.createLias("person.favoritePet", "pet"); // inner join
c.add(Restrictions.like("pet.name", name));

关于java - 对包含的实体执行类似查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20542381/

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