jpa

JPA(一)

JAVA 2010-07-02 22:50:08 阅读74 评论0   字号: 订阅

 

 

一、   映射实体:

@Entity(name="Customer")//Customer:实体的名称select c from Customer c

@Table(schema="db",uniqueConstraints={

       //唯一鍵

       @UniqueConstraint(

              columnNames = {"CUSTOMER_NAME"}

       )/*,@UniqueConstraint(

              columnNames = {"NAME","SHORTNAME"}

       )*/

})//CUSTOMER:表名,catalog:目录名,schema:数据库

二、   映射ID

1.       Sequence生成器:

    @Id

    @GeneratedValue(

           strategy=GenerationType.SEQUENCE,

           generator="myseq"

    )

    @SequenceGenerator(

           name="myseq",

           sequenceName="id_seq"//,initialValue=1,allocationSize=1

    )

/*@Id @GeneratedValue(generator = "myseq")

        @org.hibernate.annotations.GenericGenerator(

           name = "myseq",

           parameters = {

@org.hibernate.annotations.Parameter(

name="sequence",value="id_seq"

)},

           strategy = "sequence"

    )*/

2.       表生成器:

    @GeneratedValue(

           strategy=GenerationType.TABLE,

           generator="myseq"

    )

    @TableGenerator(

           name="myseq",

           table="tb_seq",

           pkColumnName="gen_name",//栏位名

           valueColumnName="gen_value",//栏位名

           pkColumnValue="pk_tb_seq",//栏位值

           allocationSize=1//,UniqueConstraintTable一样

    )

3.       复合主鍵:

@Embeddable

public class CustomerPK implements java.io.Serializable{

      private String name;

  private String email;

 

public class Customer implements java.io.Serializable {

    @EmbeddedId

private CustomerPK pk;

 

//@Embeddable(第一种方式)

public class SCId implements Serializable {

    private Long sno; // 学号

private Long cno; // 课程号

 

    @Id//(第一种方式) 此方式SC.java中需@Embeddable

    @AttributeOverrides({

       @AttributeOverride(name="sno",column=@Column(name="SNO")),

       @AttributeOverride(name="cno",column=@Column(name="CNO"))

    })

    @EmbeddedId//此方式SC.java中无需@Embeddable(第二种方式)

    @AttributeOverrides({

       @AttributeOverride(name="sno",column=@Column(name="SNO")),

       @AttributeOverride(name="cno",column=@Column(name="CNO"))

    })

    //@Transient(映射非持久化类型)

private SCId scid;

 

<!-- <composite-id name="scid" class="SCId"> -->

        <composite-id>

            <key-property name="sno" type="long">

                <column name="Sno" />

            </key-property>

            <key-property name="cno" type="long">

                <column name="Cno" />

            </key-property>

     </composite-id>

三、   映射方法与属性:

@Basic(fetch=FetchType.EAGER,optional=false)//LAZY:延时加载,EAGER:即时加载(default EAGER),optional表示属性是否可为空default true

@Temporal(TemporalType.DATE)//default java.sql.TIMESTAMP Temporal@转换成java.util.Date

@Column(

           name="CUSTOMER_NAME",

           //unique=true,//是否唯一

           //nullable=false,//是否为空

           //insertable=false,//是否允许insert

           //updatable=false,//是否允许update

           //columnDefinition="varchar2(200) not null",

           length=512//precision=12,scale=2,精度为12,小数倍数为2

)

四、   映射枚举:

@Enumerated(EnumType.ORDINAL)//EnumType.STRING

private CustomerType types;

public enum CustomerType {

    COMPETITOR,INVESTOR,PARTNER,VENDER

}

五、   一对一:

1.       共享主鍵:

User.java:

@OneToOne

    @PrimaryKeyJoinColumn

    @org.hibernate.annotations.Cascade(

           value = org.hibernate.annotations.CascadeType.SAVE_UPDATE

    )

private Address address;

<class name="User" table="USER">

         <id name="id" type="long" column="USER_ID">

        <generator class="sequence">

              <param name="sequence">id_seq</param>

       </generator>

         </id>

         <property name="loginName"/>

         <property name="admin" type="yes_no"/>

        <one-to-one name="address" class="Address" cascade="save-update"/>

</class>

Address.java:

@Id @GeneratedValue(generator = "myForeignGenerator")

@org.hibernate.annotations.GenericGenerator(

        name = "myForeignGenerator",

        strategy = "foreign",

        parameters = @org.hibernate.annotations.Parameter(name = "property",value = "user")

)

@Column(name = "ADDRESS_ID")

private Long id;

@OneToOne

    @PrimaryKeyJoinColumn

private User user;

<class name="Address" table="ADDRESS">

         <id name="id" type="long" column="ADDRESS_ID">

        <generator class="foreign">

              <param name="property">user</param>

       </generator>

         </id>

         <property name="street"/>

         <property name="city"/>

         <property name="zipcode"/> 

         <one-to-one name="user"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值