【问题标题】:CrudRepository generated a messed up Sql Request [duplicate]CrudRepository 生成了一个混乱的 Sql 请求 [重复]
【发布时间】:2017-11-28 10:56:15
【问题描述】:

我尝试在我的工作中使用 CrudRepository。而当sql请求出现在我的日志上时,就是不正常了。

真正的表是'AllDatabase.AllUserInfo',但生成的sql请求看起来像'all_user_info alluresinf0_',无法使用。

我一直在互联网上,似乎没有人遇到我的问题(据我所知)。如果我的项目中缺少某些配置,请有人告诉我。

我在 Intellij Idea 上使用 'Spring Initializer' 并选择了 'Web' 、 'JPA' 、 'MySQL' 。这些是我的代码。

这是我的仓库

package com.chuchurest.proj.Repository;

import com.chuchurest.proj.Entity.AllUserInfo;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
* Created by slimshady23 on 6/25/2017 AD.
*/

@Transactional
@Repository
public interface UserRepository extends CrudRepository<AllUserInfo,String> {

}

这里是“AllUserInfo”实体

package com.chuchurest.proj.Entity;

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import java.io.Serializable;

/**
 * Created by slimshady23 on 6/23/2017 AD.
 */

@Entity
@Table(name = "AllUserInfo")
public class AllUserInfo {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private String Id;

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

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

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

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

    @Column(name="rating")
    private Integer Rating;

    @Column(name="skill")
    private Integer Skill;

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

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    public String getUsername() {
        return Username;
    }

    public void setUsername(String username) {
        Username = username;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        Password = password;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }

    public String getPhone() {
        return Phone;
    }

    public void setPhone(String phone) {
        Phone = phone;
    }

    public Integer getRating() {
        return Rating;
    }

    public void setRating(Integer rating) {
        Rating = rating;
    }

    public Integer getSkill() {
        return Skill;
    }

    public void setSkill(Integer skill) {
        Skill = skill;
    }

    public String getDescription() {
        return Description;
    }

    public void setDescription(String description) {
        Description = description;
    }
}

这就是我调用 save() 方法的方式

package com.chuchurest.proj.Service;

import com.chuchurest.proj.DAO.UserInfoDAO;
import com.chuchurest.proj.Entity.AllUserInfo;
import com.chuchurest.proj.Repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Created by slimshady23 on 6/24/2017 AD.
 */


@Service
public class AppService {

    @Autowired
    private UserRepository userRepository;


    public void PerformRegister(AllUserInfo userinfo)
    {
        userRepository.save(userinfo);
    }

}

这里是 Application.properties

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/AllDatabase
spring.datasource.username=root
spring.datasource.password= ******


spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.id.new_generator_mappings = false
spring.jpa.properties.hibernate.format_sql = true
spring.jpa.show-sql= true

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 

【问题讨论】:

  • 看看这个似乎相关的问题stackoverflow.com/questions/39162976/…
  • 欢迎堆栈溢出。请避免使用图片展示代码。
  • 如果 Hibernate / Spring 提出了 all_user_info 的 TABLE 名称,尽管您明确指定了 @Table(name=...),那么它违反了 JPA 规范。 JPA 规范明确指出,如果指定了表名,那么这就是应该使用的......并且不允许提供者在感觉像时将下划线符号放在那里

标签: java mysql spring intellij-idea spring-data-jpa


【解决方案1】:

注意点,schema.tablename 和 tablename 别名的区别

AllUserInfo_f0 是 AllUserInfo 的别名。默认情况下,它在 Hibernate 中用于支持同一张表上的多次查询关系。它不会破坏你的 sql。

【讨论】:

  • 问题不在于别名,而在于表名本身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2014-08-27
  • 1970-01-01
  • 2016-01-02
相关资源
最近更新 更多