当前位置: 首页 > 知识库问答 >
问题:

Hibernate Projection select语句导致内部服务器错误

仰经武
2023-03-14

当我尝试在Hibernate中运行指定的select语句时,我遇到了一个内部服务器错误(没有写入Tomcat日志,只有500个错误)。运行传统的简单<code>select<code>语句时,我没有问题。

我正在将hibernate查询记录到我的控制台。工作正常的hibernate查询只是一个传统的select语句(从实体x中选择x):

Hibernate: 
    select
        trumpialis0_.TLDLID as TLDLID1_0_,
        trumpialis0_.TLDLDNM as TLDLDNM2_0_,
        trumpialis0_.TLDLMSG as TLDLMSG3_0_,
        trumpialis0_.TLDLNAM as TLDLNAM4_0_,
        trumpialis0_.TLDLDAB as TLDLDAB5_0_,
        trumpialis0_.TLDLSTS as TLDLSTS6_0_ 
    from
        LIBRARY.TABLE trumpialis0_ 
    where
        trumpialis0_.TLDLSTS='W'

运行< code>select x.property时的hibernate查询...来自实体x

   Hibernate: 
        select
            trumpialis0_.TLDLDNM as col_0_0_ 
        from
            LIBRARY.TABLE trumpialis0_ 
        where
            trumpialis0_.TLDLSTS='W'

运行select的Java是:rows=em.createQuery("selectx.displayNamefrom X,其中x.webStatus='W'"). getResultList();

我的实体如下所示:

@Entity
@Table(name = "TABLE", schema = "LIBRARY")
@XmlRootElement
public class X {
    private String id;
    private String name;
    private String displayName;
    private String webStatus;
    private String messagesPerMonth;

    @Id
    @Column(name = "TLDLID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    ....

值得一提的是,我可以在Intellij中运行JPA-QL查询并返回我想要的列,但是当我这样做时,它们似乎丢失了列名。

有没有一种方法可以让我只选择某些属性?我不需要返回所有的东西,也真的不想强制转换为“返回对象”之类的东西。

共有1个答案

连正信
2023-03-14

我的问题是多方面的。

首先,我没有在选择语句中使用正确的语法。我真正需要做的是从现有实体的结果创建一个新实体。我终于在谷歌上意识到了这一点,并意识到通过调试器;我的代码直到之后才失败,我想对结果做些什么,而不是结果本身。

rows = em.createQuery("select NEW com.example.entities.Entity(list.id, list.name, list.displayName, list.messsagesPerMonth) from Entity list where list.webStatus = 'W'").getResultList();

现在,为了正确地完成这项工作,Intellij 足够聪明,警告我实体中不存在这样的构造函数,因此我必须基于这些值创建一个构造函数,并将其添加到我的其他生成的实体代码中。

最后,没有任何有用的调试就对Hibernate进行代码轰炸,这完全是我对OO的缺乏经验。

尽管允许将 null 值设置为 Entity 属性,但当您处理基于字符串的整个长度返回字符串的旧数据库时,您渴望在实体内部整理这些字符串,因为它们在从数据库返回后包含许多空格。

不幸的是,我这样做的方式只是getName()et的返回语句上的一个简单的deature.trim()。其他方法。

public String getMesssagesPerMonth() {
    return messagesPerMonth;
}

我需要的是更健壮的东西,带有错误检查,这样如果属性设置为null,它就不会尝试trim()一个null值。

public String getMesssagesPerMonth() {
    if (messagesPerMonth != null) {
        return messagesPerMonth.trim();
    } else {
        return messagesPerMonth;
    }
}
 类似资料:
  • 问题内容: 我正在尝试执行此AJAX帖子,但是由于某些原因,我遇到了服务器500错误。我可以看到它在控制器中达到了断点。因此问题似乎出在回调上。任何人? 这是应该返回的字符串: 问题答案: 我怀疑服务器方法在通过断点后会引发异常。使用Firefox / Firebug或IE8开发人员工具查看您从服务器获得的实际响应。如果有异常,您将获得YSOD html,这应有助于您确定要查找的位置。 还有一件事

  • 我在尝试进行返回JSON的ajax POST调用时出现内部错误。ajax调用来自JS页面: 这是我的Spring MVC调用方法: 问题是,我在这个类中只设置了几个字段(30个字段中有17个)。这是一个具有简单setter-getter的bean类。如果我设置了所有30个字段,效果很好。你能建议如何设置JSON响应,以便我可以纠正这个问题吗。

  • 在使用包含非ASCII字符的cookie响应任何请求时,ColdFusion 11似乎会崩溃。IIS 8.5返回HTTP 500内部服务器错误(空白白页)。 复制的步骤: > 在Javascript控制台中运行以下命令,并尝试加载任何CFML页面:

  • 我是新的角度6。我用spring boot开发了一个post服务,当我通过postman测试它时,它工作得很好,但当我用web浏览器测试它时,它给了我这个错误: HttpErrorResponse ;{headers:HttpHeaders,status:500,statusText:“ok”,URL:“http://localhost:8080/api/test/ordermiss”,ok:fa

  • 我用wordpress和woocommerce(www.jescesole.eu)建立了一个网站。由于该网站在德国销售,我不得不在最近几天安装一个附加插件,woocommerce germanized(与polylang一起,以德语和意大利语查看内容),我升级了wp和所有插件,但当客户提交订单时,会出现一条内部服务器错误消息。我阅读了服务器错误日志,并报告了一条很长的错误消息: 周四,13四月20

  • 目前我面临一个问题。好的,让我分享一下。 我已经将这个项目部署到服务器中,它工作正常,所有操作都成功。但是突然它在登录时基本上得到了。当我下载日志时,它会显示。当我再次重新启动我的服务器时,它再次顺利工作。但我认为这需要一个永久的解决方案。我也喜欢分享日志的完整跟踪。 技术:python3.6