首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JPA查询中,HIbernate无法解析foreignKey列

问在JPA查询中,HIbernate无法解析foreignKey列
EN

Stack Overflow用户
提问于 2019-07-09 16:26:09
回答 1查看 954关注 0票数 1

我有一个弹簧启动项目( v2.0.2.RELEASE )。我有两个实体Aliment和Freezer。Aliment.freezer_id是Freezer.Id的外键。

在我的别名CrudRepository中,我在方法上使用@Query来编写JPA:

代码语言:javascript
复制
@Query("select distinct al from Aliment al WHERE al.freezer_id = :freezerId")
Set<Aliment> findFreezerContent(@Param("freezerId")Long freezerId);

我得到以下错误,这似乎是相当清楚的

由: java.lang.IllegalArgumentException: org.hibernate.QueryException:未能解析属性: freezer_id of: my query引起

我解释地通过注释freezer_id将列名设置为@JoinColumn(name="freezer_id", referencedColumnName="id")。

我使用postgresql并在pg_admin中看到该列是由hibernate创建的。

守则的部分内容如下:

Aliment.java

代码语言:javascript
复制
@Entity
public class Aliment extends EntityRoot {
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="freezer_ida", referencedColumnName="id")
    private Freezer freezer;



    @Column(name="name")
    private String name;

    @Column(name="category")
    private String category;

    @Column(name="iconic_font_name")
    private String iconicFontName;

    @Column(name="quantity")
    private Double quantity;

    @Column(name="quantity_unit")
    private String quantityUnit;

    @Column(name="stored_date")
    private Date storedDate;

    @Column(name="expiration_date")
    private Date expirationDate;
 
    //other methods
}

Freezer.java

代码语言:javascript
复制
@Entity
public class Freezer extends EntityRoot {


    @OneToMany(mappedBy = "freezer", cascade= CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    private Set<Aliment> content;



    @Column(name="name")
    private String name;

    //other methods
}

AlimentRepository.java

代码语言:javascript
复制
public interface AlimentRepository extends CrudRepository<Aliment, Long> {

    @Query("select distinct al from Aliment al WHERE al.freezer_id = :freezerId")
    Set<Aliment> findFreezerContent(@Param("freezerId")Long freezerId);
}

EntityRoot.java

代码语言:javascript
复制
@MappedSuperclass  
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public abstract class EntityRoot {
    @Id @GeneratedValue @Column(name="id")
    protected Long id;
    
    @Generated(value = GenerationTime.INSERT)
    @Temporal(value=TemporalType.TIMESTAMP)
    @Column(name="creation_timestamp", insertable=false)
    protected Date creationTimestamp;

    @Generated(value = GenerationTime.ALWAYS)
    @Temporal(value=TemporalType.TIMESTAMP)
    @Column(name="update_timestamp")
    protected Date updateTimestamp;

    //other methods
}

我的目标是不使用join。有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-09 17:14:50

HQL查询中有一个问题。

您无法在HQL查询中映射SQL列名freezer_id。

您需要用属性名编写HQL查询。

请将查询更改为:

@Query("select distinct al from Aliment al WHERE al.freezer.id = :freezerId")

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56956936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档