我有以下模型类
@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。
答案 0 :(得分:1)
来自select查询末尾的test0_
,其中显示:from tests test0_
。它或多或少也给你的表一个别名。这看起来很好恕我直言。
答案 1 :(得分:0)
实际上,我自己弄清楚了 - 对于浪费的时间感到抱歉。显然,postgre中列的命名约定是在我使用camelCase时使用snake_case。这似乎也是JPA中的默认命名约定(我通过在application.properties文件中设置不同的命名策略来抑制它。)
查询的问题不在于test0_ reference,正如其他答案所指出的那样,但是在db中选择了camelCase列。重命名列以使用snake_case后,问题就解决了。