在哪里放置hibernate注释?

时间:2010-07-20 02:10:46

标签: java hibernate annotations

我把hibernate注释放在哪里?

它是我实例变量上面的行吗?或者在吸气器之前?或者在二传手之前?或者这不重要吗?

非常感谢

4 个答案:

答案 0 :(得分:22)

您可以将它们放在字段 getter 上。从Hibernate Annotations参考指南:

  

2.2.1. Marking a POJO as persistent entity

     

(...)

     

取决于您是否注释   字段或方法,访问类型   Hibernate使用的将是field或   属性。 EJB3规范要求   你在元素上声明注释   将被访问的类型,即   如果使用属性,则为getter方法   访问,如果您使用字段的字段   访问。在两者中混合注释   应避免使用字段和方法。   Hibernate将猜测访问类型   从@Id或者的位置   @EmbeddedId。

您可能还想了解允许强制/覆盖访问类型的@Access注释(在Hibernate Annotations 3.5和JPA 2.0之前,它是Hibernate Annotation Extensions的一部分):

  

2.2.2.2. Access type

     

默认情况下,类的访问类型   层次结构由位置定义   @Id或@EmbeddedId注释。   如果这些注释在一个字段上,   然后只考虑字段   持久性和访问状态   通过现场。如果有注释   是吸气者,然后是吸气剂   被认为是持久性和   国家通过。访问   的getter / setter。这很好用   练习并是推荐的   方法

     
    

注意

         

在类层次结构中放置注释必须保持一致     (无论是领域还是财产)     能够确定默认访问权限     类型。建议坚持下去     一个单一的注释放置     整个战略     应用

  
     

但在某些情况下,您需要   到:

     
      
  • 强制实体层次结构的访问类型
  •   
  • 覆盖类层次结构中特定实体的访问类型
  •   
  • 覆盖可嵌入类型的访问类型
  •   
     

最佳用例是嵌入式   几个实体使用的类   可能不会使用相同的访问类型。在   这种情况最好强迫   可嵌入类的访问类型   水平。

     

(...)

关于两种风格的利弊,我建议阅读以下问题:

答案 1 :(得分:2)

这取决于你的风格。你可以把它放在野外或吸气前。在严格的JPA中,setter上的注释被忽略,但我不确定Hibernate是否遵循这一点。

您需要在整个实体中保持一致,或者您需要在类的顶部使用默认模式提供@Access注释,并在每个要从当前类偏离的字段/属性之前提供另一个@Access模式。

答案 2 :(得分:1)

众所周知,Hibernate使用Java反射。因此,无论是将其置于领域之上还是高于吸气剂,都无关紧要。

答案 3 :(得分:1)

以下是Hibernate中使用的一些重要注释的描述。

@Entity: declares the class as an entity (i.e. a persistent POJO class)

@Table: is set at the class level; it allows you to define the table, catalog, and schema names for your entity mapping. If no @Table is defined the default values are used: the unqualified class name of the entity.

@Id: declares the identifier property of this entity.

@Generated Value: annotation is used to specify the primary key generation strategy to use. If the strategy is not specified by default AUTO will be used.

@Column: annotation is used to specify the details of the column to which a field or property will be mapped. If the @Column annotation is not specified by default the property name will be used as the column name.

基于注释的Hibernate继承映射: 在hibernate中有三种os继承映射。 他们是

1.每个班级层次表:

@Inheritance – Defines the inheritance strategy to be used for an entity class hierarchy. It is specified on the entity class that is the root of the entity class hierarchy.

@DiscriminatorColumn – Is used to define the discriminator column for the SINGLE_TABLE  inheritance mapping strategies. The strategy and the discriminator column are only specified in the root of an entity class hierarchy or sub hierarchy in which a different inheritance strategy is applied

If the @DiscriminatorColumn annotation is missing, and a discriminator column is required, the name of the discriminator column defaults to "DTYPE" and the discriminator type to DiscriminatorType.STRING.

@DiscriminatorValue – Is used to specify the value of the discriminator column for entities of the given type. The DiscriminatorValue annotation can only be specified on a concrete entity class. If the DiscriminatorValue annotation is not specified and a discriminator column is used, a provider-specific function will be used to generate a value representing the entity type. If the DiscriminatorType is STRING, the discriminator value default is the entity name.

2.每个子类层次结构的表:

@InheritanceType – Defines inheritance strategy options. JOINED is a strategy in which fields that are specific to a subclass are mapped to a separate table than the fields that are common to the parent class, and a join is performed to instantiate the subclass. 

@PrimaryKeyJoinColumn – This annotation specifies a primary key column that is used as a foreign key to join to another table.

3.每个具体类层次结构的表:

@InheritanceType – Defines inheritance strategy options. TABLE_PER_CLASS is a strategy to map table per concrete class.
@AttributeOverrides – This annotation is used to override mappings of multiple properties or fields.

@AttributeOverride – The AttributeOverride annotation is used to override the mapping of a Basic (whether explicit or default) property or field or Id property or field.

希望能帮助我们了解hibenate中使用的基本注释。