<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 100  文章 - 50  trackbacks - 0
    <2014年10月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    我收藏的一些文章!

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    @Table 
    Table用來定義entity主表的name,catalog,schema等屬性。 
    屬性說明: 

    • name:表名
    • catalog:對應(yīng)關(guān)系數(shù)據(jù)庫中的catalog
    • schema:對應(yīng)關(guān)系數(shù)據(jù)庫中的schema
    • UniqueConstraints:定義一個UniqueConstraint數(shù)組,指定需要建唯一約束的列


    Java代碼  收藏代碼
    1. @Entity  
    2. @Table(name="CUST")  
    3. public class Customer { ... }  



    @SecondaryTable 
    一個entity class可以映射到多表,SecondaryTable用來定義單個從表的名字,主鍵名字等屬性。 
    屬性說明: 
    • name:表名
    • catalog:對應(yīng)關(guān)系數(shù)據(jù)庫中的catalog
    • pkJoin:定義一個PrimaryKeyJoinColumn數(shù)組,指定從表的主鍵列
    • UniqueConstraints:定義一個UniqueConstraint數(shù)組,指定需要建唯一約束的列

    下面的代碼說明Customer類映射到兩個表,主表名是CUSTOMER,從表名是CUST_DETAIL,從表的主鍵列和主表的主鍵列類型相同,列名為CUST_ID。 

    Java代碼  收藏代碼
    1. @Entity  
    2. @Table(name="CUSTOMER")  
    3. @SecondaryTable(name="CUST_DETAIL",pkJoin=@PrimaryKeyJoinColumn(name="CUST_ID"))  
    4. public class Customer { ... }  




    @SecondaryTables 
    當(dāng)一個entity class映射到一個主表和多個從表時,用SecondaryTables來定義各個從表的屬性。 
    屬性說明: 
    • value:定義一個SecondaryTable數(shù)組,指定每個從表的屬性。


    Java代碼  收藏代碼
    1. @Table(name = "CUSTOMER")  
    2. @SecondaryTables( value = {  
    3. @SecondaryTable(name = "CUST_NAME", pkJoin = { @PrimaryKeyJoinColumn(name = "STMO_ID", referencedColumnName = "id") }),  
    4. @SecondaryTable(name = "CUST_ADDRESS", pkJoin = { @PrimaryKeyJoinColumn(name = "STMO_ID", referencedColumnName = "id") }) })  
    5. public class Customer {}  



    @UniqueConstraint 
    UniqueConstraint定義在Table或SecondaryTable元數(shù)據(jù)里,用來指定建表時需要建唯一約束的列。 
    屬性說明: 
    • columnNames:定義一個字符串?dāng)?shù)組,指定要建唯一約束的列名。


    Java代碼  收藏代碼
    1. @Entity  
    2. @Table(name="EMPLOYEE",uniqueConstraints={@UniqueConstraint(columnNames={"EMP_ID", "EMP_NAME"})})  
    3. public class Employee { ... }  



    @Column 
    Column元數(shù)據(jù)定義了映射到數(shù)據(jù)庫的列的所有屬性:列名,是否唯一,是否允許為空,是否允許更新等。 
    屬性說明: 
    • unique:是否唯一
    • nullable:是否允許為空
    • insertable:是否允許插入
    • updatable:是否允許更新
    • columnDefinition:定義建表時創(chuàng)建此列的DDL
    • secondaryTable:從表名。如果此列不建在主表上(默認建在主表),該屬性定義該列所在從表的名字。


    Java代碼  收藏代碼
    1. public class Person {  
    2.     @Column(name = "PERSONNAME", unique = true, nullable = false, updatable = true)  
    3.     private String name;  
    4.     @Column(name = "PHOTO", columnDefinition = "BLOB NOT NULL", secondaryTable="PER_PHOTO")  
    5.     private byte[] picture;  



    @JoinColumn 
    如果在entity class的field上定義了關(guān)系(one2one或one2many等),我們通過JoinColumn來定義關(guān)系的屬性。JoinColumn的大部分屬性和Column類似。 
    屬性說明: 
    • unique:是否唯一
    • referencedColumnName:該列指向列的列名(建表時該列作為外鍵列指向關(guān)系另一端的指定列)
    • nullable:是否允許為空
    • insertable:是否允許插入
    • updatable:是否允許更新
    • columnDefinition:定義建表時創(chuàng)建此列的DDL
    • secondaryTable:從表名。如果此列不建在主表上(默認建在主表),該屬性定義該列所在從表的名字。

    下面的代碼說明Custom和Order是一對一關(guān)系。在Order對應(yīng)的映射表建一個名為CUST_ID的列,該列作為外鍵指向Custom對應(yīng)表中名為ID的列。 

    Java代碼  收藏代碼
    1. public class Custom {  
    2.     @OneToOne  
    3.     @JoinColumn(name="CUST_ID", referencedColumnName="ID", unique=true, nullable=true, updatable=true)  
    4.     public Order getOrder() {  
    5.     return order;  
    6.     }  




    @JoinColumns 
    如果在entity class的field上定義了關(guān)系(one2one或one2many等),并且關(guān)系存在多個JoinColumn,用JoinColumns定義多個JoinColumn的屬性。 
    屬性說明: 
    • value:定義JoinColumn數(shù)組,指定每個JoinColumn的屬性。

    下面的代碼說明Custom和Order是一對一關(guān)系。在Order對應(yīng)的映射表建兩列,一列名為CUST_ID,該列作為外鍵指向Custom對應(yīng)表中名為ID的列,另一列名為CUST_NAME,該列作為外鍵指向Custom對應(yīng)表中名為NAME的列。 

    Java代碼  收藏代碼
    1. public class Custom {  
    2.     @OneToOne  
    3.     @JoinColumns({  
    4.         @JoinColumn(name="CUST_ID", referencedColumnName="ID"),  
    5.         @JoinColumn(name="CUST_NAME", referencedColumnName="NAME")  
    6.     })  
    7.     public Order getOrder() {  
    8.     return order;  
    9.     }  



    @Id 
    聲明當(dāng)前field為映射表中的主鍵列。id值的獲取方式有五種:TABLE, SEQUENCE, IDENTITY, AUTO, NONE。Oracle和DB2支持SEQUENCE,SQL Server和Sybase支持IDENTITY,mysql支持AUTO。所有的數(shù)據(jù)庫都可以指定為AUTO,我們會根據(jù)不同數(shù)據(jù)庫做轉(zhuǎn)換。NONE(默認)需要用戶自己指定Id的值。
    屬性說明: 
    • generate:主鍵值的獲取類型
    • generator:TableGenerator的名字(當(dāng)generate=GeneratorType.TABLE才需要指定該屬性)

    下面的代碼聲明Task的主鍵列id是自動增長的。(Oracle和DB2從默認的SEQUENCE取值,SQL Server和Sybase該列建成IDENTITY,mysql該列建成auto increment。) 

    Java代碼  收藏代碼
    1.  @Entity  
    2.  @Table(name = "OTASK")  
    3.  public class Task {  
    4. @Id(generate = GeneratorType.AUTO)  
    5. public Integer getId() {  
    6.  return id;  
    7. }  
    8.  }  

      

    @IdClass 
    當(dāng)entity class使用復(fù)合主鍵時,需要定義一個類作為id class。id class必須符合以下要求:類必須聲明為public,并提供一個聲明為public的空構(gòu)造函數(shù)。必須實現(xiàn)Serializable接,覆寫equals()和hashCode()方法。entity class的所有id field在id class都要定義,且類型一樣。 
    屬性說明: 
    • value:id class的類名

    下面的代碼聲明Task的主鍵列id是自動增長的。(Oracle和DB2從默認的SEQUENCE取值,SQL Server和Sybase該列建成IDENTITY,mysql該列建成auto increment。) 

    Java代碼  收藏代碼
    1. public class EmployeePK implements java.io.Serializable{  
    2.    String empName;  
    3.    Integer empAge;  
    4. public EmployeePK(){}  
    5. public boolean equals(Object obj){ ......}  
    6. public int hashCode(){......}  
    7. }  
    8. @IdClass(value=com.acme.EmployeePK.class)  
    9. @Entity(access=FIELD)  
    10. public class Employee {  
    11.     @Id String empName;  
    12.     @Id Integer empAge;  
    13. }  



    @MapKey 
    在一對多,多對多關(guān)系中,我們可以用Map來保存集合對象。默認用主鍵值做key,如果使用復(fù)合主鍵,則用id class的實例做key,如果指定了name屬性,就用指定的field的值做key。 
    屬性說明: 
    • name:用來做key的field名字

    下面的代碼說明Person和Book之間是一對多關(guān)系。Person的books字段是Map類型,用Book的isbn字段的值作為Map的key。 

    Java代碼  收藏代碼
    1.    @Table(name = "PERSON")  
    2.    public class Person {  
    3. @OneToMany(targetEntity = Book.class, cascade = CascadeType.ALL, mappedBy = "person")  
    4. @MapKey(name = "isbn")  
    5. private Map books = new HashMap();  
    6.    }  



    @MappedSuperclass 
    使用@MappedSuperclass指定一個實體類從中繼承持久字段的超類。當(dāng)多個實體類共享通用的持久字段或?qū)傩詴r,這將是一個方便的模式。 

    您可以像對實體那樣使用任何直接和關(guān)系映射批注(如 @Basic 和 @ManyToMany)對該超類的字段和屬性進行批注,但由于沒有針對該超類本身的表存在,因此這些映射只適用于它的子類。繼承的持久字段或?qū)傩詫儆谧宇惖谋怼?nbsp;

    可以在子類中使用@AttributeOverride或@AssociationOverride來覆蓋超類的映射配置。 
    @MappedSuperclass沒有屬性。 

    Java代碼  收藏代碼
    1. //如何將Employee指定為映射超類  
    2. @MappedSuperclass  
    3. public class Employee {  
    4.     @Id  
    5.     protected Integer empId;  
    6.   
    7.     @Version  
    8.     protected Integer version;  
    9.   
    10.     @ManyToOne  
    11.     @JoinColumn(name="ADDR")  
    12.     protected Address address;  
    13. }  
    14.   
    15. //如何在實體類中使用@AttributeOverride以覆蓋超類中設(shè)置的配置。  
    16. @Entity  
    17. @AttributeOverride(name="address", column=@Column(name="ADDR_ID"))  
    18. public class PartTimeEmployee extends Employee {  
    19.     @Column(name="WAGE")  
    20.     protected Float hourlyWage;  
    21. }  

        


    @PrimaryKeyJoinColumn 
    在三種情況下會用到@PrimaryKeyJoinColumn 
    • 繼承。
    • entity class映射到一個或多個從表。從表根據(jù)主表的主鍵列(列名為referencedColumnName值的列),建立一個類型一樣的主鍵列,列名由name屬性定義。
    • one2one關(guān)系,關(guān)系維護端的主鍵作為外鍵指向關(guān)系被維護端的主鍵,不再新建一個外鍵列。

    屬性說明: 
    • name:列名。
    • referencedColumnName:該列引用列的列名
    • columnDefinition:定義建表時創(chuàng)建此列的DDL

    下面的代碼說明Customer映射到兩個表,主表CUSTOMER,從表CUST_DETAIL,從表需要建立主鍵列CUST_ID,該列和主表的主鍵列id除了列名不同,其他定義一樣。 

    Java代碼  收藏代碼
    1.    @Entity  
    2.    @Table(name="CUSTOMER")  
    3. @SecondaryTable(name="CUST_DETAIL",pkJoin=@PrimaryKeyJoinColumn(name="CUST_ID",referencedColumnName="id"))  
    4.    public class Customer {   
    5.        @Id(generate = GeneratorType.AUTO)  
    6.        public Integer getId() {  
    7.     return id;  
    8. }  
    9.    }  

    下面的代碼說明Employee和EmployeeInfo是一對一關(guān)系,Employee的主鍵列id作為外鍵指向EmployeeInfo的主鍵列INFO_ID。 
    Java代碼  收藏代碼
    1.             
    2.    @Table(name = "Employee")  
    3.    public class Employee {  
    4. @OneToOne  
    5. @PrimaryKeyJoinColumn(name = "id", referencedColumnName="INFO_ID")  
    6. EmployeeInfo info;  
    7.    }  
        
        

    @PrimaryKeyJoinColumns 
    如果entity class使用了復(fù)合主鍵,指定單個PrimaryKeyJoinColumn不能滿足要求時,可以用PrimaryKeyJoinColumns來定義多個PrimaryKeyJoinColumn 
    屬性說明: 
    • value: 一個PrimaryKeyJoinColumn數(shù)組,包含所有PrimaryKeyJoinColumn

    下面的代碼說明了Employee和EmployeeInfo是一對一關(guān)系。他們都使用復(fù)合主鍵,建表時需要在Employee表建立一個外鍵,從Employee的主鍵列id,name指向EmployeeInfo的主鍵列INFO_ID和INFO_NAME 

    Java代碼  收藏代碼
    1.    @Entity  
    2.    @IdClass(EmpPK.class)  
    3.    @Table(name = "EMPLOYEE")  
    4.    public class Employee {  
    5. private int id;  
    6. private String name;  
    7. private String address;  
    8. @OneToOne(cascade = CascadeType.ALL)  
    9. @PrimaryKeyJoinColumns({  
    10. @PrimaryKeyJoinColumn(name="id", referencedColumnName="INFO_ID"),  
    11. @PrimaryKeyJoinColumn(name="name" , referencedColumnName="INFO_NAME")})  
    12. EmployeeInfo info;  
    13.    }  
    14.   
    15.   
    16.    @Entity  
    17.    @IdClass(EmpPK.class)  
    18.    @Table(name = "EMPLOYEE_INFO")  
    19.    public class EmployeeInfo {  
    20. @Id  
    21. @Column(name = "INFO_ID")  
    22. private int id;  
    23. @Id  
    24. @Column(name = "INFO_NAME")  
    25. private String name;  
    26.    }  



    @Transient 
    Transient用來注釋entity的屬性,指定的這些屬性不會被持久化,也不會為這些屬性建表 

    Java代碼  收藏代碼
    1. @Transient  
    2. private String name;  

        

    @Version 
    Version指定實體類在樂觀事務(wù)中的version屬性。在實體類重新由EntityManager管理并且加入到樂觀事務(wù)中時,保證完整性。每一個類只能有一個屬性被指定為version,version屬性應(yīng)該映射到實體類的主表上。 
    屬性說明: 
    • value: 一個PrimaryKeyJoinColumn數(shù)組,包含所有PrimaryKeyJoinColumn

    下面的代碼說明versionNum屬性作為這個類的version,映射到數(shù)據(jù)庫中主表的列名是OPTLOCK 

    Java代碼  收藏代碼
    1. @Version  
    2. @Column("OPTLOCK")  
    3. protected int getVersionNum() { return versionNum; }  




    @Lob 
    Lob指定一個屬性作為數(shù)據(jù)庫支持的大對象類型在數(shù)據(jù)庫中存儲。使用LobType這個枚舉來定義Lob是二進制類型還是字符類型。 
    LobType枚舉類型說明: 
    • BLOB 二進制大對象,Byte[]或者Serializable的類型可以指定為BLOB。
    • CLOB 字符型大對象,char[]、Character[]或String類型可以指定為CLOB。

    屬性說明: 
    • fetch:定義這個字段是lazy loaded還是eagerly fetched。數(shù)據(jù)類型是FetchType枚舉,默認為LAZY,即lazy loaded.
    • type:定義這個字段在數(shù)據(jù)庫中的JDBC數(shù)據(jù)類型。數(shù)據(jù)類型是LobType枚舉,默認為BLOB。

    下面的代碼定義了一個BLOB類型的屬性和一個CLOB類型的屬性 

    Java代碼  收藏代碼
    1. @Lob  
    2. @Column(name="PHOTO" columnDefinition="BLOB NOT NULL")  
    3. protected JPEGImage picture;  
    4.   
    5. @Lob(fetch=EAGER, type=CLOB)  
    6. @Column(name="REPORT")  
    7. protected String report;  
      
       

    @JoinTable 
    JoinTable在many-to-many關(guān)系的所有者一邊定義。如果沒有定義JoinTable,使用JoinTable的默認值。 
    屬性說明: 
    • table:這個join table的Table定義。
    • joinColumns:定義指向所有者主表的外鍵列,數(shù)據(jù)類型是JoinColumn數(shù)組。
    • inverseJoinColumns:定義指向非所有者主表的外鍵列,數(shù)據(jù)類型是JoinColumn數(shù)組。

    下面的代碼定義了一個連接表CUST和PHONE的join table。join table的表名是CUST_PHONE,包含兩個外鍵,一個外鍵是CUST_ID,指向表CUST的主鍵ID,另一個外鍵是PHONE_ID,指向表PHONE的主鍵ID。 

    Java代碼  收藏代碼
    1. @JoinTable(  
    2. table=@Table(name=CUST_PHONE),  
    3. joinColumns=@JoinColumn(name="CUST_ID", referencedColumnName="ID"),  
    4. inverseJoinColumns=@JoinColumn(name="PHONE_ID", referencedColumnName="ID")  
    5. )  



    @TableGenerator 
    TableGenerator定義一個主鍵值生成器,在Id這個元數(shù)據(jù)的generate=TABLE時,generator屬性中可以使用生成器的名字。生成器可以在類、方法或者屬性上定義。 
    生成器是為多個實體類提供連續(xù)的ID值的表,每一行為一個類提供ID值,ID值通常是整數(shù)。 
    屬性說明: 
    • name:生成器的唯一名字,可以被Id元數(shù)據(jù)使用。
    • table:生成器用來存儲id值的Table定義。
    • pkColumnName:生成器表的主鍵名稱。
    • valueColumnName:生成器表的ID值的列名稱。
    • pkColumnValue:生成器表中的一行數(shù)據(jù)的主鍵值。
    • initialValue:id值的初始值。
    • allocationSize:id值的增量。

    下面的代碼定義了兩個生成器empGen和addressGen,生成器的表是ID_GEN 

    Java代碼  收藏代碼
    1. @Entity  
    2. public class Employee {  
    3. ...  
    4. @TableGenerator(name="empGen",table=@Table(name="ID_GEN"),pkColumnName="GEN_KEY",  
    5.                 valueColumnName="GEN_VALUE",pkColumnValue="EMP_ID",allocationSize=1)  
    6. @Id(generate=TABLE, generator="empGen")  
    7. public int id;  
    8. ...  
    9. }  
    10.   
    11. @Entity  
    12. public class Address {  
    13. ...  
    14. @TableGenerator(name="addressGen",table=@Table(name="ID_GEN"),pkColumnValue="ADDR_ID")  
    15. @Id(generate=TABLE, generator="addressGen")  
    16. public int id;  
    17. ...  
    18. }  



    @SequenceGenerator 
    SequenceGenerator定義一個主鍵值生成器,在Id這個元數(shù)據(jù)的generator屬性中可以使用生成器的名字。生成器可以在類、方法或者屬性上定義。生成器是數(shù)據(jù)庫支持的sequence對象。 
    屬性說明: 
    • name:生成器的唯一名字,可以被Id元數(shù)據(jù)使用。
    • sequenceName:數(shù)據(jù)庫中,sequence對象的名稱。如果不指定,會使用提供商指定的默認名稱。
    • initialValue:id值的初始值。
    • allocationSize:id值的增量。

    下面的代碼定義了一個使用提供商默認名稱的sequence生成器 

    Java代碼  收藏代碼
    1. @SequenceGenerator(name="EMP_SEQ", allocationSize=25)  

        

    @DiscriminatorColumn 
    DiscriminatorColumn定義在使用SINGLE_TABLE或JOINED繼承策略的表中區(qū)別不繼承層次的列 
    屬性說明: 
    • name:column的名字。默認值為TYPE。
    • columnDefinition:生成DDL的sql片斷。
    • length:String類型的column的長度,其他類型使用默認值10。

    下面的代碼定義了一個列名為DISC,長度為20的String類型的區(qū)別列 

    Java代碼  收藏代碼
    1. @Entity  
    2. @Table(name="CUST")  
    3. @Inheritance(strategy=SINGLE_TABLE,discriminatorType=STRING,discriminatorValue="CUSTOMER")  
    4. @DiscriminatorColumn(name="DISC", length=20)  
    5. public class Customer { ... }  




    @NamedQuery 
    在使用JPA持久化規(guī)范的應(yīng)用程序中,可以使用實體管理器動態(tài)創(chuàng)建和執(zhí)行查詢,也可以預(yù)定義查詢并在運行時按名稱執(zhí)行。 
    使用@NamedQuery創(chuàng)建與@Entity或@MappedSuperclass關(guān)聯(lián)的預(yù)定義查詢,這些查詢: 
    • 使用JPA查詢語言進行基于任何基礎(chǔ)數(shù)據(jù)庫的可移植執(zhí)行
    • 經(jīng)常被使用
    • 比較復(fù)雜并且難于創(chuàng)建
    • 可以在不同實體之間共享
    • 只返回實體(從不返回標量值),并只返回一個類型的實體


    屬性說明: 
    • query:(必須屬性)要指定查詢,請將 query 設(shè)置為 JPA 查詢語言(作為 String)
    • hints:默認值:空 QueryHint 數(shù)組。默認情況下,JPA 持續(xù)性提供程序假設(shè) SQL 查詢應(yīng)完全按照 query 屬性提供的方式執(zhí)行。要微調(diào)查詢的執(zhí)行,可以選擇將hints設(shè)置為一個QueryHint數(shù)組(請參閱 @QueryHint)。在執(zhí)行時,EntityManager 將向基礎(chǔ)數(shù)據(jù)庫傳遞提示。
    • name:(必須屬性)要指定查詢名稱,請將name設(shè)置為所需的String名稱

    下面的代碼使用@NamedQuery批注定義一個JPA查詢語言查詢,該查詢使用名為firstname的參數(shù) 

    Java代碼  收藏代碼
    1. //使用 @NamedQuery 實現(xiàn)一個帶參數(shù)的查詢  
    2. @Entity  
    3. @NamedQuery(name="findAllEmployeesByFirstName",  
    4.             query="SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName = :firstname")  
    5. public class Employee implements Serializable {  
    6.      …  
    7. }  
    8.   
    9. //執(zhí)行命名查詢  
    10. Query queryEmployeesByFirstName = em.createNamedQuery(“findAllEmployeesByFirstName”);  
    11. queryEmployeeByFirstName.setParameter(“firstName”, “John”);  
    12. Collection employees = queryEmployessByFirstName.getResultList();  




    @NamedQueries 
    如果需要指定多個@NamedQuery,則必須使用一個@NamedQueries指定所有命名查詢 
    屬性說明: 
    • value:要指定兩個或更多屬性覆蓋,請將value設(shè)置為NamedQuery實例數(shù)組


    Java代碼  收藏代碼
    1. @Entity  
    2. @NamedQueries({@NamedQuery(name="findAllEmployeesByFirstName",  
    3.                query="SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName = :firstname"),  
    4.                @NamedQuery(name="findAllEmployeesByLasttName",  
    5.                query="SELECT OBJECT(emp) FROM Employee emp WHERE emp.lasstName = :lastname")})  
    6. public class PartTimeEmployee extends Employee {  
    7.   
    8. }  




    @NamedNativeQuery 
    使用@NamedNativeQuery創(chuàng)建與@Entity或@MappedSuperclass關(guān)聯(lián)的預(yù)定義查詢,這些查詢: 
    • 使用基礎(chǔ)數(shù)據(jù)庫的原生SQL
    • 經(jīng)常被使用
    • 比較復(fù)雜并且難于創(chuàng)建
    • 可以在不同實體之間共享
    • 返回實體、標量值或兩者的組合(另請參閱 @ColumnResult、@EntityResult、@FieldResult 和@SqlResultSetMapping)

    屬性說明: 
    • query:(必須屬性)要指定查詢,請將query設(shè)置為SQL查詢(作為String)
    • hints:默認值:空 QueryHint 數(shù)組。默認情況下,JPA 持續(xù)性提供程序假設(shè) SQL 查詢應(yīng)完全按照 query 屬性提供的方式執(zhí)行。要微調(diào)查詢的執(zhí)行,可以選擇將hints設(shè)置為一個QueryHint數(shù)組(請參閱 @QueryHint)。在執(zhí)行時,EntityManager 將向基礎(chǔ)數(shù)據(jù)庫傳遞提示。
    • name:(必須屬性)要指定查詢名稱,請將name設(shè)置為所需的String名稱
    • resultClass:默認值:JPA 持續(xù)性提供程序假設(shè)結(jié)果類是關(guān)聯(lián)實體的Class.要指定結(jié)果類,請將resultClass設(shè)置為所需的 Class
    • resultSetMapping:默認值:JPA持續(xù)性提供程序假設(shè)原生SQL查詢中的SELECT語句:返回一個類型的實體;包括與返回的實體的所有字段或?qū)傩韵鄬?yīng)的所有列;并使用與字段或?qū)傩悦Q(未使用AS語句)相對應(yīng)的列名。要控制JPA持續(xù)性提供程序如何將JDBC結(jié)果集映射到實體字段或?qū)傩砸约皹肆浚埻ㄟ^將resultSetMapping設(shè)置為所需的@SqlResultSetMapping的String名稱來指定結(jié)果集映射


    Java代碼  收藏代碼
    1. //定義一個使用基礎(chǔ)數(shù)據(jù)庫的原生SQL的查詢  
    2. @Entity  
    3. @NamedNativeQuery(name="findAllEmployees",query="SELECT * FROM EMPLOYEE")  
    4. public class Employee implements Serializable {  
    5.   
    6. }  
    7.   
    8. //Hibernate如何使用EntityManager獲取此查詢以及如何通過Query方法getResultList執(zhí)行該查詢  
    9. Query queryEmployees = em.createNamedQuery("findAllEmployees");  
    10. Collection employees = queryEmployees.getResultList();  



    @NamedNativeQueries 
    如果需要指定多個@NamedNativeQuery,則必須使用一個@NamedNativeQueries指定所有命名查詢 
    屬性說明: 
    • value:要指定兩個或更多屬性覆蓋,請將value設(shè)置為NamedNativeQuery實例數(shù)組

    下面代碼顯示了如何使用此批注指定兩個命名原生查詢 

    Java代碼  收藏代碼
    1. @Entity  
    2. @NamedNativeQueries({@NamedNativeQuery(name="findAllPartTimeEmployees",  
    3.                      query="SELECT * FROM EMPLOYEE WHERE PRT_TIME=1"),  
    4.                      @NamedNativeQuery(name="findAllSeasonalEmployees,  
    5.                      query="SELECT * FROM EMPLOYEE WHERE SEASON=1")})  
    6.   
    7. public class PartTimeEmployee extends Employee {  
    8.   
    9. }  




    @OneToMany和@ManyToOne 
    屬性說明: 
    cascade默認值CascadeType的空數(shù)組。默認情況下,JPA不會將任何持久化操作層疊到關(guān)聯(lián)的目標。如果希望某些或所有持久化操作層疊到關(guān)聯(lián)的目標,應(yīng)將cascade設(shè)置為一個或多個 CascadeType類型的枚舉值,其中包括:● ALL – 針對擁有實體執(zhí)行的任何持久化操作均層疊到關(guān)聯(lián)的目標。● MERGE – 如果合并了擁有實體,則將merge層疊到關(guān)聯(lián)的目標。● PERSIST – 如果持久保存擁有實體,則將persist層疊到關(guān)聯(lián)的目標。● REFRESH – 如果刷新了擁有實體,則refresh為關(guān)聯(lián)的層疊目標。● REMOVE – 如果刪除了擁有實體,則還刪除關(guān)聯(lián)的目標。
    fetch在Hibernate里用時默認值:FetchType.LAZY,它要求程序運行時延遲加載所有的集合和實體。如果這不適合于應(yīng)用程序或特定的持久字段,將fetch設(shè)置為FetchType.EAGER,它提示程序在首次訪問數(shù)據(jù)時應(yīng)馬上加載所有的集合和實體
    mappedBy默認值:如果關(guān)系是單向的,則該關(guān)聯(lián)提供程序確定擁有該關(guān)系的字段。如果關(guān)系是雙向的,則將關(guān)聯(lián)相反(非擁有)方上的mappedBy元素設(shè)置為擁有此關(guān)系的字段或?qū)傩缘拿Q
    targetEntity默認值:使用一般參數(shù)定義的Collection的參數(shù)化類型。默認情況下,如果使用通過一般參數(shù)定義的Collection,則程序?qū)谋灰玫膶ο箢愋屯茢喑鲫P(guān)聯(lián)的目標實體。如果Collection不使用一般參數(shù),則必須指定作為關(guān)聯(lián)目標的實體類:將關(guān)聯(lián)擁有方上的 targetEntity元素設(shè)置為作為關(guān)系目標的實體的Class




    @OneToOne 
    屬性比@OneToMany多一個: 
    optionalde默認值:true。默認情況下,JPA持久化程序假設(shè)所有(非基元)字段和屬性的值可以為空。如果這并不適合于您的應(yīng)用程序,請將optional設(shè)置為false




    @OrderBy 
    一般將@OrderBy與@OneToMany和@ManyToMany一起使用 
    在一對多,多對多關(guān)系中,有時我們希望從數(shù)據(jù)庫加載出來的集合對象是按一定方式排序的,這可以通過OrderBy來實現(xiàn),默認是按對象的主鍵升序排列。 
    屬性說明: 
    • value:字符串類型,指定排序方式。格式為"fieldName1 [ASC|DESC],fieldName2 [ASC|DESC],......" 
      排序類型可以不指定,默認是ASC升序。 

    下面的代碼說明Person和Book之間是一對多關(guān)系。集合books按照Book的isbn升序,name降序排列。

    Java代碼  收藏代碼
    1. @Table(name = "MAPKEY_PERSON")  
    2. public class Person {  
    3.      @OneToMany(targetEntity = Book.class, cascade = CascadeType.ALL, mappedBy = "person")  
    4.      @OrderBy(name = "isbn ASC, name DESC")  
    5.      private List books = new ArrayList();  
    6. }  
    7.   
    8.   
    9. @Entity   
    10. public class Project {  
    11.      @ManyToMany  
    12.      @OrderBy("lastname ASC", "seniority DESC")  
    13.      public List<Employee> getEmployees() {  
    14.           …  
    15.      }  
    16. }  
    17.   
    18.   
    19. @Entity   
    20. public class Employee {  
    21.      @Id  
    22.      private int empId;  
    23.   
    24.      private String lastname;  
    25.   
    26.      private int seniority;  
    27.   
    28.      @ManyToMany(mappedBy="employees")  
    29.      // By default, returns a List in ascending order by empId  
    30.      public List<Project> getProjects() {  
    31.          …  
    32.      }  
    33. }  
    posted on 2014-10-29 14:15 fly 閱讀(1956) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 中文字幕成人免费高清在线| 麻豆va在线精品免费播放| 免费日本一区二区| 最新精品亚洲成a人在线观看| 污污的视频在线免费观看| 内射无码专区久久亚洲| 日韩免费高清一级毛片| 国产亚洲精品高清在线| 国内精品免费久久影院| 亚洲AV综合色区无码一区爱AV| 人妻无码久久一区二区三区免费 | 免费萌白酱国产一区二区| 国产成人综合亚洲| 久久影视综合亚洲| 免费国产污网站在线观看15| 亚洲国语在线视频手机在线| 在线观看AV片永久免费| 色妞www精品视频免费看| 亚洲一区二区三区AV无码| 久久免费福利视频| 波多野结衣免费一区视频| 亚洲国产综合专区电影在线| 国产福利在线免费| 免费国产在线精品一区| 亚洲AV无码国产在丝袜线观看| 1000部拍拍拍18勿入免费视频软件| 亚洲色丰满少妇高潮18p| 国产精品亚洲玖玖玖在线观看| 久久国产精品一区免费下载| 亚洲三级高清免费| 亚洲精品岛国片在线观看| 96免费精品视频在线观看| 亚洲aⅴ无码专区在线观看春色| 亚洲熟妇少妇任你躁在线观看无码| 99免费视频观看| 国产综合成人亚洲区| 婷婷精品国产亚洲AV麻豆不片 | 亚洲人成网站色7799| 亚洲日韩激情无码一区| 国产精品无码免费播放| 中文字幕无线码中文字幕免费|