有两张table个人和城市实体。数据库中的personentity通过外键fk\u cityid链接到cityentity。我需要用给定的cityid选择personentity表的所有记录(名称)。join在任何地方都可以使用,但在本例中,我不需要cityentity表中的数据,只需要personentity表的name字段。以下是类的描述:
@Entity
public class PersonEntity {
private Long id;
private String name;
private CityEntity cityId;
}
@Entity
public class CityEntity {
private Long id;
private String name;
}
以下是hql查询:
@Repository
public interface PersonEntityRepository extends JpaRepository<PersonEntity, Long> {
@Query("select p.name FROM PersonEntity p where (p.name = :name or :name is null) " +
"and (p.cityId = :cityId or :cityId is null)")
List<PersonEntity> findByNameAndCity (
@Param("name") String name,
@Param("cityId") CityEntity cityId);
}
试用者id:
@Query("select p.name FROM PersonEntity p where (p.name = :name or :name is null) " +
"and (p.cityId.id = :cityId or :cityId is null)")
List<PersonEntity> findByNameAndCity (
@Param("name") String name,
@Param("cityId") Long cityId);
在这两种情况下,错误都是:“无法确定数据类型”。
调用函数的选项:
servisPerson.findByNameAndCity (null, cityId);
或
servisPerson.findByNameAndCity (name, null);
事实上,有两个以上的参数。为了简化,我只展示了两个。
servisPerson.findByNameAndCity (name, age, ..., cityId);
1条答案
按热度按时间6ovsh4lw1#
个人实体应该是这样的
你可以这样写你的查询
springdatajpa非常聪明,可以在幕后为您生成查询。
顺便说一句,您试图编写jpql,而不是hql。
编辑(对有关长方法名的评论的React):
我建议避免创建jpql查询,因为它更容易出错。如果不喜欢冗长的方法名,可以将其 Package 为存储库中较短的默认方法: