为Hibernate实体的特定字段设置查询 [英] Setting up query for specific field of Hibernate entity

查看:338
本文介绍了为Hibernate实体的特定字段设置查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用spring和hibernate。出现以下情况,我不知道是否真的有可能实施。例如,有一个hibernate实体

  @Entity 
public class TestEntity {
private String field1;
私人字符串field2;
private String specField;

@Column(name =field1)
public String getField1(){
return field1;


@Column(name =field2)
public String getField2(){
return field2;


public String getSpecField(){
return(field1!= null?field1:field2);




$ b $ p
$ b

我需要specField的值由SQL查询而不是java代码。
类似于此

  @Entity 
public class TestEntity {
private String field1;
私人字符串field2;
private String specField;

@Column(name =field1)
public String getField1(){
return field1;


@Column(name =field2)
public String getField2(){
return field2;


@Query(value =COALESCE(field1,field2))
public String getSpecField(){
return specField;


我被告知应该有能力这样做。但没有发现任何证实此事的事情。

究竟查询的确实不重要。我需要specField将被一些查询,而不是由java代码。



感谢您的帮助。

更新感谢@premkumar,提醒您使用@Formula
所以现在我有

  @Entity 
public class TestEntity {
private String field1;
私人字符串field2;
private String specField;

@Column(name =field1)
public String getField1(){
return field1;


@Column(name =field2)
public String getField2(){
return field2;

$ b @Formula(COALESCE(field2,field2))
public String getSpecField(){
return(field1!= null?field1:field2) ;






$

但是应用程序无法从使用$ b初始化bean初始化$ b NullPointerException在org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory



我也试过以下内容:


  1. 将公式放在private String specField上面 - 应用程序已启动,但hibernate失败,无法在数据库中找到spec_field


  2. 将@Formula和@Transient放在getter - app开始,没有错误,但specField始终为空。它看起来像hibernate完全忽略了它。

  3. 如果你使用hibernate,请尝试以下操作:

    $ pre $ lt; code> @Formula(COALESCE(field1,field2))
    public String getSpecField(){
    返回specField;
    }

注意: - 据我所知,在JPA中没有其他选择。注意这会混淆hibernate和jpa注释。


I use spring and hibernate. The following situation occured and I don't know if it's really possible to implement. Will appreciate any help.

For example, there is a hibernate entity

    @Entity
public class TestEntity {
    private String field1;
    private String field2;
    private String specField;

    @Column(name = "field1")
    public String getField1() {
        return field1;
    }

    @Column(name = "field2")
    public String getField2() {
        return field2;
    }

    public String getSpecField() {
        return (field1 != null ? field1 : field2);
    }
}

And I need the value for specField to be generated by SQL query and not by java code. Something like this

    @Entity
public class TestEntity {
    private String field1;
    private String field2;
    private String specField;

    @Column(name = "field1")
    public String getField1() {
        return field1;
    }

    @Column(name = "field2")
    public String getField2() {
        return field2;
    }

    @Query(value= "COALESCE(field1, field2)")
    public String getSpecField() {
        return specField;
    }
}

I was told that there should be ability to do so. But didn't find anything that approves this.

it's not actually important what exactly query does. I need that specField will be taken by some query and not by java code. Is it possible?

Thanks for help.

UPDATE Thanks to @premkumar, for advicing to use @Formula So now I have

@Entity
public class TestEntity {
    private String field1;
    private String field2;
    private String specField;

    @Column(name = "field1")
    public String getField1() {
        return field1;
    }

    @Column(name = "field2")
    public String getField2() {
        return field2;
    }

    @Formula("COALESCE(field2, field2)")
    public String getSpecField() {
        return (field1 != null ? field1 : field2);
    }
}

But app fails to start on bean initialization with NullPointerException at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory

I tried also the following:

  1. Put formula above "private String specField" - app started, but hibernate failed on could not find spec_field in database

  2. Put @Formula and @Transient on getter - app started, no errors, but specField is always null. It looks like hibernate totally ignored it

解决方案

If you are using hibernate, try the following:

@Formula("COALESCE(field1, field2)")
public String getSpecField() {
    return specField;
}

Note:- As far as I know there is no alternative in JPA. Beware this will mixup hibernate and jpa annotations.

这篇关于为Hibernate实体的特定字段设置查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆