JPA使用

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中

JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

JPA是JAVA EE5平台标准的ORM规范,得到所有的J2EE平台支持。JPA主要包括ORM映射元数据、JPA的API用来操作实体对象执行CRUD操作、查询语言三方面的技术。

ORM元数据的领域对象称为实体(Entity)按JPA的规范,实体具备以下条件:

1 必须使用javax.persistence.Entity注解或在XML映射文件中有对应的元素;(使用JPA就可省去过去复杂的hibernate与model的配置文件)

2 必须具有一个不带参数的构造函数,类不能声明为final,方法和需要持久化的属性也不能声明为final

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

4 需要持久化的属性 不能是public 必须通过实体类方法访问。

1)


 (注意:persistence.xml文件的位置决定持久性的根(Persistence Root)。持久性的根为JAR文件或者包含META-INF目录(前提是persistence.xml位于此)的目录。一般将这个persistence.xml文件放在src下的META-INF中。命名及位置都不能变)

这是网上找的一段代码

<persistence xmlns="http://java.sun.com/xml/ns/persistence"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_version=1">  
    <persistence-unit name="mysqlJPA" transaction-type="RESOURCE_LOCAL">  
        <properties>  
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />  
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />  
            <property name="hibernate.connection.username" value="root" />  
            <property name="hibernate.connection.password" value="123456" />  
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db1" />  
            <property name="hibernate.max_fetch_depth" value="3" />  
            <property name="hibernate.hbm2ddl.auto" value="update" />  
        </properties>  
    </persistence-unit>  
</persistence>  

2 model

@Entity//实体
@Table(name="APP_MOBILE_OS")//表名
@org.hibernate.annotations.Table(appliesTo = "APP_MOBILE_OS", comment = "操作系统表 ")//与数据库表的关联
public class MobileOS extends BaseObject{
    private Long id;
    private String name;
    private String fileName;
       private Date createTime;
    private Set<MobileUserAgent> mobileUserAgents;
    private Integer version;
       @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    @Column(name="NUMID")//主键的定义
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
     @Column(name="VC2NAME",unique=true)//惟一的
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
      @Column(name="VC2FILENAME")//字符
    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
   @Column(name = "DATCREATETIME", length = 7)
   @Temporal(value= TemporalType.TIMESTAMP)//时间类型
    public Date getCreateTime() {
       if(null==createTime)
          createTime=new Date();
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @OneToMany(mappedBy = "mobileOS", fetch = FetchType.LAZY, cascade = {
        CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH,CascadeType.REMOVE })
    @BatchSize(size=50)			//外键Set 一对多的关联
    public Set<MobileUserAgent> getMobileUserAgents() {
        return mobileUserAgents;
    }

    public void setMobileUserAgents(Set<MobileUserAgent> mobileUserAgents) {
        this.mobileUserAgents = mobileUserAgents;
    }

    @Version	//版本锁javax.persistence.*
    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }

    @Override
    public String toString() {
        return null;  //To change body of implemented methods use File | Settings | File Templates.
    }}

3)hibernate.cfg.xml配置

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <mapping class="com.xx.model.xx"/>
    </session-factory>
</hibernate-configuration>

· 如果我们有些属性不想被持久化到数据表中就使用@Transient

`两个实体使用相同数据表存储,只用一个字段区分时——

父表 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn(name = "区分字段名",discriminatorType = DiscriminatorType.INTEGER,length = 1)

@DiscriminatorValue(value="1")

在子类的开始处使用@DiscriminatorValue(value="2")


还有很多标签在此没有提到,以后还会补充







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值