jpa hibernate mysql查询损坏

时间:2017-06-13 20:52:15

标签: java mysql spring hibernate jpa

您好我的Spring-boot-JPA-Hibernate类有一个令人困惑的错误。

我使用JPA Dali工具从我的SQL Schema创建实体类。 使用它们时(使用Spring-boot-jpa / hibarnate)我遇到了一些无法匹配的奇怪问题。 这是一个例子:

属性:

hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/users
spring.datasource.username=root
spring.datasource.password=root

实体:

@Entity
@Table(name="n_user")
@NamedQuery(name="NUser.findAll", query="SELECT n FROM NUser n")
public class NUser implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private int id;

    private String imageUrl1;

    private String name_first;


    public NCaterer() {
    }

    public int getId() {
        return this.id;
    }

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


    public String getImageUrl1() {
        return this.imageUrl1;
    }

    public void setImageUrl1(String imageUrl1) {
        this.imageUrl1 = imageUrl1;
    }

    public String getName_first() {
        return this.name_first;
    }

    public void setName_first(String name_first) {
        this.name_first = name_first;
    }

}

存储库:

public interface UserRepo extends CrudRepository<NUser, Long> {

}

但是Hibernate创建了它的查询:

Hibernate:
    /* select
        generatedAlias0
    from
        NUser as generatedAlias0 */ select
            nuser0_.id as id1_0_,
            nuser0_.image_url1 as image_ur2_0_,
            nuser0_.name_first as name_firs3_0_
        from
            n_user nuser0_

这里的问题是 image_url1 ,它应该是 imageurl1 ,如实体类中所述。这发生在几个方面。

为什么Hibernate会在查询中将CamelCase getter转换为camel_case?如何配置它不要这样做?

2 个答案:

答案 0 :(得分:0)

似乎有很多人在不同情况下遇到同样的问题。也许去看看下面的不同命名策略:

Naming Strategy One

Naming Strategy Two

Naming Strategy Three

但是,您可以更改休眠的配置。请查看here以获得有关此方面的进一步帮助。或者,看看这个post,看看有人如何使用上述方法对其进行更改。

答案 1 :(得分:0)

如果您想通过自己的字段使用@Column注释来指定列名。

示例:

@Column(name = "imageUrl1")
private String imageUrl1;
@Column(name = "nameFirst")
private String name_first;