@Table必须是JPA实体吗?

时间:2015-09-23 10:50:29

标签: hibernate jpa jpa-2.1

我使用JPA和hibernate作为JPA提供程序来连接到我的数据库。我在数据库中有一个名为Candidates的表,这是我的JPA实体。

 @Entity
 public class Candidate {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    public long cid;

    public String name;

    @ManyToOne
    @JoinColumn(name="userCharacter")
    public UserCharacter userCharacter;
}

以下是我的代码中的随机JPA查询之一。

String queryStr = "SELECT new models.CandidateReport(c.cid, c.name, uc.rating) "
                + "FROM Candidate c JOIN c.userCharacter uc";

然后hibernate生成了sql为

select candidate0_.cid as col_0_0_, candidate0_.name as col_1_0_, usercharac1_.rating as col_2_0_ 
from Candidate candidate0_ 
join UserCharacter usercharac1_
on candidate0_.userCharacter=usercharac1_.uid

表示实体Candidate未被查询为候选人(复数)。明确指定@Table(name="Candidates")后 问题得到解决。不是JPA或Hibernate会自动查询多个名称,例如,如果实体名称是User,它不会在数据库中查找users表,我想它会丢失一些配置。

1 个答案:

答案 0 :(得分:3)

由于JPA中类的默认表名与类名(Candidate)相同,因此如果要将其映射到不同的表名,则必须放置@Table。根据所有JPA教程,会说