CrudRepository错误选择查询

时间:2016-01-02 16:22:39

标签: java sql spring hibernate jpa

我有以下模型类

@Entity
@Table(name = "tests")
public class Test implements Serializable {

@Column(nullable = false)
private String prop1;

@Column(nullable = false)
private String prop2;

@Id
@Column(nullable = false)
private String prop3;

@Column(nullable = false)
private String prop4;

public Test(final String prop1, final String prop2, final String prop3, final String prop4) {
    this.prop1 = prop1;
    this.prop2 = prop2;
    this.prop3 = prop3;
    this.prop4 = prop4;
}

我创建了以下扩展CrudRepository

的界面
public interface TestRepository extends CrudRepository<Test, String> {
    // blank
}

在我的控制器中,我有以下代码:

@Controller
@RequestMapping("/test")
public class TestController {

@Autowired
private TestRepository testRepository;

@RequestMapping(method = GET)
@ResponseBody
public Iterable<Test> fetchTests() {
    return testRepository.findAll();
}

问题是当运行fetchTests方法时,生成的查询类似于:

select test0_.prop1 as prop11_0_, test0_.prop2 as prop22_0_, test0_.prop3 as prop33_0_, test0_.prop4 as prop44_0_ from tests test0_

虽然它应该只是

select tests.prop1 as prop11_0_, tests.prop2 as prop22_0_, tests.prop3 as prop33_0_, tests.prop4 as prop44_0_ from tests

我无法理解额外的tests0_引用来自何处?关于什么是错的任何想法?我正在使用postgre作为dbms。

2 个答案:

答案 0 :(得分:1)

来自select查询末尾的test0_,其中显示:from tests test0_。它或多或少也给你的表一个别名。这看起来很好恕我直言。

答案 1 :(得分:0)

实际上,我自己弄清楚了 - 对于浪费的时间感到抱歉。显然,postgre中列的命名约定是在我使用camelCase时使用snake_case。这似乎也是JPA中的默认命名约定(我通过在application.properties文件中设置不同的命名策略来抑制它。)

查询的问题不在于test0_ reference,正如其他答案所指出的那样,但是在db中选择了camelCase列。重命名列以使用snake_case后,问题就解决了。