JPA实体注解(三)

来源:互联网 发布:dwg转excel软件 编辑:程序博客网 时间:2024/06/10 11:50

添加实体类和使用JPA的注解标注持久化特性

一、实体应具备以下的条件:

        #  必须使用javax.persistence.Entity注解或者在XML映射文件中有对应的元素;

        #  必须具有一个不带参的构造函数;

        #  类不能声明为finall,方法和需要持久化的属性也不能声明为final;

        #  如果游离状的实体对象需要以值的方式进行传递,如通过Session  bean的远程业务接口传递,则必须实现Serializable接口;

        #  需要持久化的属性,其访问修饰符不能是public,它们必须通过实体类方法进行访问。 

二、实体Annotation--基本注解

        @Entity

                #  将对象标注为一个实体,表示需要保存在数据库中

                #  默认情况下类名即为表名,通过name属性显式指定表名

        @Id

                #  对应的属性是表的主键

        @GeneratedValue

                #  主键的产生策略,通过strategy属性指定;

                #  默认情况下,JPA自动选择一个最适合底层数据库的主键生成策略。

                    可供选择的策略有:

                    《1》IDENTITY  :表自增键字段(SqlServer对应策略,Oracle不支持这种方式)

                    《2》AUTO  :JPA自动选择合适的策略,是默认选项(MySql对应策略)

                    《3》SEQUENCE  :通过序列产生主键,通过@SequenceGenerator注解指定序列名(如Oracle的Sequence,MySql不支持这种方式)

                    《4》TABLE  :通过表产生主键,使用该策略可以使应用更易于数据库移植。不同的JPA实现商生成的表名是不同的。

        @Embeddedld或@IdClass

               #  组合关键字

        @Column

               #  属性对应的表字段

三、实体Annotation--继承关系

                对于继承的实体,在javax.persistence.InheritanceType定义了3种映射策略

                【SINGLE_TABLE】:父子类都保存到同一个表中,通过字段进行区分。

                【JOINED】:父子类相同的部分保存在同一个表中,不同的部分分开存放,通过表连接获取完整数据。

                【TABLE_PER_CLASS】::每一个类对应自己的表(一般不推荐采用这种方式)。

四、实体Annotation--关联关系

                @OneToOne

                @OneToMany

                @ManyToOne

                @ManyToMany

【Address.java】        

        @Entity  //  实体类注解

        @Table(name="ACCP50NT_ADDRESS")

        public  class  Address  implements  Serializable{

                private  Long  id;                  //  POJO属性

                private String  street;

                private  String  city;

                private  String  country;

                public  Address(){}        //  默认构造方法

                @Id        //  主键

                @GeneratedValue(Strategy = GenerationType.AUTO)        //  主键生成器:AUTO--由系统选择生成策略;  IDENTITY--使用标识列。

                @Column(name = "AddressID")        //  属性到字段的映射,缺省与属性同名

                public Long  getId(){

                        return  id;

                }

                public  void  setId(Long  id){

                        this.id = id;

                }

                ......

        }












0 0
原创粉丝点击