JPA注解開發


JPA注解開發

jpa是sun公司的一個ORM規范,只有接口和注解,沒有具體實現。

jpa是EJB3中的。

單表常用注解

書寫注解,並配置

@Entity
@Table(name = "c_book")
public class Book {
    @Id
    //主鍵策略
//    @GeneratedValue(strategy=GenerationType.AUTO)//native
    @GenericGenerator(name="wc",strategy="uuid")
    @GeneratedValue(generator="wc")//生成uuid
    private String id;
    @Column(name="cname",length=20,nullable=false,unique=true)

配置Hibernate.cfg.xml

 

    <!-- 映射配置文件 -->
     <mapping class="cn.it.entity.Book"/>

 

主鍵相關的:

Auto相當與native,默認值

自定義主鍵策略(下面使用hibernate的實現):

屬性字段官方參考配置:

 

 

注解:可以放到屬性上面設置,也可以在getter方法上設置,效果一樣。

 

 

 多表常用注解

 

 一對多

新建訂單表實體類,並與客戶表建立實體關系。

@Entity
@Table(name="w_customer")

@NamedQuery(name="Customer.findAll",query="from Customer")
@NamedQueries(value=@NamedQuery(name="Customer.findAll2",query="from Customer"))
public class Customer {
    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private String city;
        @OneToMany(mappedBy="customer",//by 1 的一方  :在Order實體類中屬性customer
                cascade=CascadeType.ALL,//級聯  不包含 all-delete-orphan
                fetch=FetchType.LAZY,//懶加載
                orphanRemoval=true,//支持孤兒刪除 delete-orphan
                targetEntity=cn.it.entity.Order.class//一般忽略 ,Order是接口的化,這里配置實現類的指定
                )
    private Set<Order> orders = new HashSet<Order>();

 

--------------------------------------------------------------------------------------------------------------------------------------------

 

@Entity
@Table(name="w_order")//表名
public class Order {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String name;
    private Double price;
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="c_id")//自定義關聯外鍵屬性  映射表中字段名為c_id 覆蓋了默認的customer_id
    @Fetch(FetchMode.SELECT)//單表查詢
    @LazyToOne(LazyToOneOption.PROXY)//代理懶加載
    private Customer customer;

核心配置

<mapping class="cn.it.entity.Order"/>
<mapping class="cn.it.entity.Customer"/>

多對多

示例:學生和課程

@Entity
@Table(name="t_course")
public class Course {
        //注解主鍵
        @Id
        @GenericGenerator(name="wc",strategy="assigned")
        @GeneratedValue(generator="wc")//生成隨機數
        private Integer id;
        private String name;
        @ManyToMany
        @JoinTable(name="t_student_course",//配置中間表
        joinColumns=@JoinColumn(name="c_id"),//自定義關系表name
        inverseJoinColumns=@JoinColumn(name="s_id")//對方的外鍵名稱
        )
        private Set<Course> course=new HashSet<Course>();

 

--------------------------------------------------------------------------------------------------------------------------------------------

 

@Entity
@Table(name="t_student")
public class Student {
    //注解主鍵
    @Id
    @GenericGenerator(name="wc",strategy="assigned")
    @GeneratedValue(generator="wc")//生成隨機數
    private Integer id;
    private String name;
    @ManyToMany
    @JoinTable(name="t_student_course",//配置中間表
    joinColumns=@JoinColumn(name="s_id"),//自定義關系表name
    inverseJoinColumns=@JoinColumn(name="c_id")//對方的外鍵名稱
    )
    private Set<Course> course=new HashSet<Course>();

核心配置

 

<mapping class="cn.it.entity.Student"/>
<mapping class="cn.it.entity.Course"/>

 

命名查詢

@NamedQueries(value={
        @NamedQuery(name="Customer.findAll",query="from Customer"),
        @NamedQuery(name="Customer.findAll2",query="from Customer")
})

測試:

    List<Customer> list = session.getNamedQuery("Customer.findAll").list();
        System.out.println(list.get(0).getOrders());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM