这个 "Hibernate" class 映射究竟代表什么?

What exactly represent this "Hibernate" class mapping?

我正在开发一个 Java 我认为使用 Hibernate 的 Web 应用程序,但我不太喜欢 Hibernate,所以我有以下疑问:

我有一个名为 ReaDichiarazioneIntento 的模型 class,它映射一个名为 REA_DICHIARAZIONE_INTENTO 的数据库 table ],像这样:

@javax.persistence.IdClass(it.enel.wearea.entity.ReaDichiarazioneIntentoPK.class)
@javax.persistence.Table(name = "REA_DICHIARAZIONE_INTENTO", schema = "EDIWEA")
@Entity
public class ReaDichiarazioneIntento implements Cloneable {

    private Integer idDichiarazione;

    @javax.persistence.Column(name = "ID_DICHIARAZIONE")
    @Id
    public Integer getIdDichiarazione() {
        return idDichiarazione;
    }

    public void setIdDichiarazione(Integer idDichiarazione) {
        this.idDichiarazione = idDichiarazione;
    }

    private Integer idCliente;

    @javax.persistence.Column(name = "ID_CLIENTE")
    @Basic
    public Integer getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(Integer idCliente) {
        this.idCliente = idCliente;
    }

    ...................................................................
    ...................................................................
    ...................................................................
    SOME OTHER FIELDS AND RELATED GETTER AND SETTER METHODS
    ...................................................................
    ...................................................................
    ...................................................................

}

好吧,我对此有一些疑问class。我的疑问是:

1) 是否使用 Hibernate 将 class 映射到数据库 table?或者是什么?我知道要将数据库 table 映射到 class 我必须做类似的事情:

@Entity
@Table(name = "REA_DICHIARAZIONE_INTENTO")

为什么在这个项目中做:

@javax.persistence.IdClass(it.enel.wearea.entity.ReaDichiarazioneIntentoPK.class)
@javax.persistence.Table(name = "REA_DICHIARAZIONE_INTENTO", schema = "EDIWEA")
@Entity

@Table(name = "REA_DICHIARAZIONE_INTENTO")注解和@javax.persistence.Table有什么区别(name = "REA_DICHIARAZIONE_INTENTO", schema = "EDIWEA") 注解(在我的项目中使用)?

2)第二个疑点与这个注解有关:

@javax.persistence.IdClass(it.enel.wearea.entity.ReaDichiarazioneIntentoPK.class)

具体是什么意思?

3) 最后一个疑问与数据库中class 字段到table 列之间的映射有关。为什么只在getter方法上做,而不是直接在字段名上做?

Tnx

这是使用JPA,貌似不是hibernate。 Here is the difference according to SO and here is another link

  1. 它使用的是JPA注解,而Hibernate是一个JPA实现。 JPA 本身只是一组 interfaces/annotations,而 JPA 实现(如 Hibernate)围绕这些 interfaces/annotations 提供 meat。除了指定的架构外,这两个注释之间没有区别。 Hibernate 也有自己的 @Table annotation but it is used for additional information supplied by JPA'a @Table 注解
  2. @IdClass表示该实体使用复杂主键

Specifies a composite primary key class that is mapped to multiple fields or properties of the entity.

  1. 您可以注释字段或属性(getter),由您决定。但是,@Id 映射决定了什么是有效的,这意味着如果您将 @Id 放在字段上,那么您必须将所有其他映射也放在字段上,反之亦然。