代码之家  ›  专栏  ›  技术社区  ›  srk avivamg

JPA实体必须使用@Table

  •  0
  • srk avivamg  · 技术社区  · 11 年前

    我使用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,它是否会在数据库中查找用户表,我想它会,并且我缺少一些配置。

    1 回复  |  直到 11 年前
        1
  •  3
  •   Neil Stockton Mheboob Bloch    11 年前

    由于JPA中类的默认表名与类名相同( Candidate )那么你必须把 @Table 如果要将其映射到不同的表名。正如所有JPA教程所说