【问题标题】:Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property:引起:java.lang.IllegalArgumentException:org.hibernate.QueryException:无法解析属性:
【发布时间】:2019-04-20 13:21:48
【问题描述】:

在我的 spring-boot 应用程序中,我使用了具有一对多关系的“品牌”和“家庭”实体对象。

 @Entity
@Table(name = "family")
public class Family extends UserDateAudit {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @NotBlank
        @Size(max = 140)
        private String name;

        @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
        @ManyToOne
        @JoinColumn(name = "brand_id")
        private Brand brand;

我需要创建一个方法'findByBrandIdIn()。所以我在我的存储库类中使用了以下代码。

@Query("SELECT a FROM Family a WHERE a.brand_id=:brandId")
    Page<Family> findByBrandIdIn(@Param("brandId") String brand_id, Pageable pageable);

但是,它不允许我添加brand_id,因为它不包含在“家庭”实体类中。

如何在“家庭”课程中同时使用“私人品牌品牌”和私人 Long brand_id? 或者有没有办法将brand_id绑定到

@Query("SELECT a FROM Family a WHERE a.brand_id=:brandId")

【问题讨论】:

  • 消息说明了一切。实体 Family 中没有名为 brand_id 的属性。但是,您有一个名为brand 的属性,它(可能)有一个名为id 的属性。所以应该是select f from Family f where f.brand.id = :brandId。这是 JPQL 上的文档:docs.jboss.org/hibernate/orm/current/userguide/html_single/…。阅读它。

标签: java hibernate spring-mvc spring-boot jpa


【解决方案1】:

您必须使用下面的对象引用遍历实体

@Query("SELECT a FROM Family a WHERE a.brand.brandId=:brandId")

假设您在您的品牌实体上为 Id 映射进行了以下映射

@Id
@Column("brand_id")
private long brandId;

在 JPA 中,我们查询对象并使用实例变量 (brandId) 来引用 .不是映射的列名 (brand_id)

【讨论】:

    猜你喜欢
    • 2016-06-12
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多