• 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());
  • 相关阅读:
    mvcAPI (入门 2)
    mvcAPI (入门 1)
    IMetadataAware接口的特性定制Model元数据
    MVC 中DropDownList 用法
    MVC 中使用EF
    EF中限制字段显示长度
    EF 存储过程
    sql通用分页自定义表条件存储过程
    fffffffffff
    游标分页
  • 原文地址:https://www.cnblogs.com/lxp503238/p/7212259.html
Copyright © 2020-2023  润新知