【问题标题】:JPA Query gets transformed [duplicate]JPA Query 被转换 [重复]
【发布时间】:2016-08-18 15:05:25
【问题描述】:

我有一个类似的存储库方法

@Query("from Application app where app.id.hostId = :hostId")
List<Application> getApplicationsByApplicationId(@Param("hostId") String hostId);

我的域类读起来像

public class Application {

    @EmbeddedId
    Composite id;
     ...
     ...

    @Embeddable
    public static class Composite implements java.io.Serializable {
        @Column(name = "id")
        private String id;

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

在处理链的某处,hostIdstring 被转换为 host_id,所以我收到类似

的错误
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'application0_.host_id' in 'field list'.

我正在尝试将现有的休眠/JPA 层迁移到 Spring Boot JPA。 任何指针将不胜感激。

【问题讨论】:

  • 尝试为Composite 类添加@Access(AccessType.FIELD) 注释。并使Composite 类不是内部的。还有host_id 列如何在表中命名?
  • 与规定的更改相同的错误。 DB中的列在表中命名为hostid

标签: jpa spring-boot


【解决方案1】:

这是由 Hibernate 命名策略引起的。 默认策略将 Java 中的驼峰式大小写转换为数据库中的 _。

如果您不希望这种行为,请使用 JPA 默认值。你可以在application.properties中设置:

spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.EJB3NamingStrategy

【讨论】:

    【解决方案2】:

    用途:

    @Column(name = "hostid")
    

    注意都是小写。

    【讨论】:

      猜你喜欢
      • 2013-07-16
      • 2020-12-08
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多