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

JPA与Hibernate注释的关系

唐繁
2023-03-14

我是spring界的新手,我正在研究如何将Hibernate和spring框架集成在一起

我对Hibernate注释和JPA注释之间的关系做了一些研究。

我有类似以下实体类的东西:

package org.andrea.myexample.HibernateOnSpring.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


/* Classe che rappresenta un oggetto da persistere sul database
 * 
 */
@Entity
@Table(name="person")
public class Person {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int pid;

    private String firstname;

    private String lastname;

    public int getPid() {
        return pid;
    }

    public void setPid(int pid) {
        this.pid = pid;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
}

我不理解的是Hibernate注释和JPA注释之间的关系是什么

前面示例中使用的注释@Entity、@Table(Name=“Person”)、@GeneratedValue(Strategy=GenerationType.Auto)和id是简单的JPA注释还是针对Hibernate的特定注释?

如果我使用JPA注释将数据持久化到数据库中,那么是什么给了我Hibernate?

TNX

安德里亚

共有1个答案

林国安
2023-03-14

答案是喜忧参半的。

正如其他人指出的,JPA是Hibernate提供实现的规范。您使用JPA注释/API,通过在类路径中包含Hibernate JAR,Hibernate将提供实际的逻辑

此外,Hibernate提供了一个与JPA无关的API。你也可以用它;主要区别是:

>

  • 如果您使用JPA API,以后可以用其他JPA实现(v.g.EclipseLink)替换Hibernate,并且不需要对程序进行任何更改

    如果直接使用Hibernate API,则没有其他实现方案。这样做的好处可能是,您可以使用Hibernate定义的但不是JPA标准一部分的特性,这些特性对您可能是有用的。

    无论如何,您应该完全避免将JPA与Hibernate API混合使用。作为一个初学者,我建议你坚持使用JPA。

    为了确保您使用的是JPA,只包括java.persistence中的类/注释。不要包含org.Hibernate中的任何内容(或者,如果您只想使用Hibernate,请执行相反的操作)。

  •  类似资料:
    • 问题内容: 我有一个关于Hibernate使用的简单问题。我通过注释类的字段以及注释相应bean的get方法,以两种方式之一不断看到人们使用JPA注释。 我的问题如下:使用JPA注释,例如@Id,注释字段和bean方法之间是否有区别。 例: - - - - - -要么 - - - - - - 问题答案: Spring首选项是字段访问。这就是我所遵循的。

    • 问题内容: 有一个结构。我想以这种方式链接这三个实体:公司应包含ID,公司名称和部门列表,每个部门都有一个工人列表,ID和部门名称。每个工人都有名字,身份证。 我试图与一对多和多对一建立联系,但未成功。 公司 部 工人 我从开始: 它填充公司,但不填充其他表,也没有创建任何联接(映射)错误: 问题答案: 除了Glenn Lane的答案中提到的级联,您还需要了解双向关联是如何工作的。 它们有一个所有

    • 我正在学习Spring Data JPA,在建立这两个表之间的关系时遇到了一些问题: 具有列id、name、product_type_id的产品表 product_type表,列id,名称 一个产品只能有一种类型。一个类型可以与许多产品相关联。 在我的实体类中,我将在哪里使用@OnetoMore和@ManytoOne注解?

    • 关于注释和注释,我遇到了一个有趣的问题在Spring Boot项目上,spring data jpa也在项目中。 基本上,我有软删除机制,这是为实体设置一个有效的日期(例如属性列在实体类中带有属性)。这些实体用注释类似于。这样,将设置为now和before的软删除的实体自动删除。(例如实体类) 我还有一些其他实体没有(例如实体类) 以及其他一些可用的表。如果是Jpa查询带注释的方法。我正面临着一些

    • 问题内容: 一个运行了几个月的应用程序已经停止使用已经有几个月历史的JPA 批注。在进行集成测试时,我看到许多“ ”类型错误。 我不清楚这里出了什么问题。 我没有文件,因为我正在使用hibernate实体管理器。由于我仅使用注释,因此我的实体没有.hbm.xml文件。我的文件很小,可以正常保存。 我显然丢失了一些东西,但不能动弹。 我正在使用hibernate批注3.2.1,hibernate-e

    • 我正在开发一个应用程序,使用: Java 1.7 我想对一些字符串属性使用PostgreSQL文本数据类型。据我所知,在JPA中,要使用PostgreSQL中的文本,这应该是正确的注释: 当我像这样注释我的实体时,我遇到的错误如下所示:http://www.shredzone.de/cilla/page/299/string-lobs-on-postgresql-with-hibernate-36