繁体   English   中英

相当于javax.persistence。*注释的休眠状态

[英]hibernate equivalent of javax.persistence.* annotations

在下面的java实体bean类中,我们使用@Id和其他注释。 它们来自javax.persistence。*包。

我读过SO和其他论坛,每个人都说JPA是规范/规则集,而Hibernate是JPA实现之一。如果是这样,JPA怎么提供这些类/接口,例如@Id(Generator接口)。

如果我理解正确,那么JPA本身就提供了无需使用Hibernate就可以支持ORM的功能。

另外,我想知道1)与这些JPA注释-@ Id对应的Hibernate注释类。 2)对于javax.persistence。*包,我们需要使用Hibernate-Annotations jar吗? 或者它们来自JPA特定的jar,如果是的话,请帮助我了解软件包名称。

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
  public Employee() {

  }
  @Id
  @Column(name = "id")
  Integer id;

  @Column(name = "name")
  String name;

  public Integer getId() {
  return id;
  }

  public void setId(Integer id) {
  this.id = id;
  }

  public String getName() {
  return name;
  }

  public void setName(String name) {
  this.name = name;
  }

} 

JPA是这样的规范:实体类是用@ javax.persistence.Entity注释的类。 它必须具有一个用@ javax.persistence.Id注释的字段或getter。

Hibernate实现了规范所说的内容。 因此,它使用标准的JPA批注。 如果使用专有注释,则不会遵守规范。 而且,如果规范没有定义任何注释,则每个实现都必须定义自己的专有注释,并且不可能编写适用于该标准的各种实现的JPA代码。

注释基本上是没有实现的接口。 JPA是API的规范,不是实现。 可以通过注释访问JPA API。 JPA说应该做什么,而不是应该怎么做。

诸如Hibernate或EclipseLink之类的特定实现将在编译时和运行时使用注释来实现功能。 因此,注释是实现的标记,用于实现将其钩在自己的代码中或如何处理某些对象的方法。 因此,使用JPA时,在Hibernate中不需要相应的注释。 注释应该是标准注释,以便Hibernate可以识别它们。

如果使用供应商特定的注释,则使用的是其他API。 这个不同的API甚至可能使用相同的实现,但是您以不同的方式访问它。 当供应商特定的API提供JPA无法交付且您需要的功能时,将其与供应商特定的注释一起使用会很有用。 特别是在JPA 2.0之前,Hibernate提供了比标准更多的功能,因此使用供应商特定的API并不少见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM