当前位置: 首页 > 知识库问答 >
问题:

对于JPA实体,Is@Table必须

萧英光
2023-03-14

我使用JPA和Hibernate作为JPA提供程序来连接到我的数据库。我在数据库中有一个名为候选者的表,这是我的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

这意味着实体候选者不作为候选者查询(复数)。明确指定@表(name=“Candidates”)后,问题就解决了。JPA或Hibernate不会自动查询复数名吗?例如,如果实体名是User,它不会在数据库中查找users表吗?我想会的,我缺少一些配置。

共有1个答案

司寇祖鹤
2023-03-14

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

 类似资料:
  • 我用Spring和Hibernate开发了我的Java应用程序,我有两个实体。 我创建我的服务类别,以获得Hibernate的结果 当我调试时,我在这一行中得到这个错误: 104165[http-bio-8080-exec-3]警告组织。冬眠util。JDBCExceptionReporter-SQL错误:904,SQLState:42000 104166[http-bio-8080-exec-3

  • 问题内容: 有谁知道我该如何在hibernate状态下做到这一点: 使用JPA? EntityManager有一个contains方法,但仅此而已! 我正在编写一些代码,充当实体和会话中存储的数据之间的转换器(因此,不是存储序列化的对象,而是仅存储类名和ID)。 问题答案: 有谁知道我可以用JPA在hibernate(…)中做到这一点? JPA 1.0没有等效的功能,因此如果您坚持使用JPA 1.

  • 问题内容: 我有一个Spring MVC应用程序(Spring Boot 1.2.5版),该应用程序使用JPA与流行的Sql数据库进行交互。 因此,我有几个映射数据库中所有表的实体。显然,这些类仅具有用于实体之间关系的获取器/设置器和注释。 例如: 我的问题是:我应该对这些课程进行单元测试吗?我应该测试什么?怎么样 问题答案: 我建议您测试所有编写的内容(或选择编写)…因此在这种情况下,我看到以下

  • 当我将Java EE应用程序部署到Glassfish时,我有一个非常奇怪的问题。我有一个Eclipse EAR项目,它引用了一个Web项目(包含一个servlet),一个EJB项目(有一个EJB)和一个JPA项目(有一个@Entity)。在我的 servlet 中,我调用 EJB,它又执行以下查询: 在上面代码的第三行,我得到了一个异常: 我已经调试了上面提到的Hibernate类,即Metamo

  • 我从我的Spring项目中删除了Spring Roo,这是不必要的,而且在eclipse STS中构建花了很多时间。我执行了一个推入,我的实体对象现在包含了旧的Roo文件的源代码。 几乎没有什么变化,包括PersistentContext管理,这看起来很奇怪。事实上,我注意到,每次创建查询时,我都需要实例化实体类以获得EntityManager? 在我的实体类中,我有

  • 问题内容: 我有一个JPA实体已经存在于数据库中。 我想要一个副本(具有不同的ID),并修改了某些字段。 最简单的方法是什么?喜欢: 将其设置为字段并坚持下去会起作用吗? 我是否需要为实体创建一个克隆方法(复制以外的所有字段)? 还有其他方法(例如使用克隆框架)吗? 问题答案: 使用。它使bean不再链接到EntityManager。然后将ID设置为新ID(如果为自动,则为null),更改所需的字