2007-03-22

[Note] Hibernate @Id and @AccessType

@Id
一般使用GenerationType.AUTO即可。
GenerationType.AUTO - identity, sequence, or hilo
GenerationType.IDENTITY - MS SQL Server, MySQL
GenerationType.SEQUENCE - Oracle

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "...")
private Long getId() {
return id;
}
@AccessType

Hibernate存取Domain object的資料有兩種方式,一是透過getter與setter method(access by property),二是直接存取field(access by field),通常是建議使用前者,有封裝的作用。
在Hibernate Annotation中決定存取方式的規則如下:
  • 若設有@AccessType,則採用@AccessType之設定。
  • 不然則以@Id所在的位置決定,若@Id在property上,則採用access by property,若@Id在field上,則採用access by field。
@AccessType可放在class、field或property上,在class上表示設定為class level,整個class套用,在field或property上則為attribute level,僅該attribute(property或field)適用。

不管是透過@AccessType設定或@Id所在位置決定,若class設定為access by property,要變更特定的attribute為access by field時,必須將@AccessType("field")放在getter method上。

不管是透過@AccessType設定或@Id所在位置決定,若class設定為access by field,要變更特定的attribute為access by property時,必須將@AccessType("property")放在field上。

最後,@Embedded與@MappedSuperclass的存取規則均同於owning/inherited entity。

沒有留言:

張貼留言