JPA的CRUD操作,映射实体

来源:互联网 发布:数据库从入门到精通 编辑:程序博客网 时间:2024/05/16 12:15
1.初始化 
    EntityManagerFactory emf =  Persistence.createEntityManagerFactory("manager1");
还有另一种方法
    Map configOverrides = new HashMap();//可编程配置
    configOverrides.put("hibernate.hbm2ddl.auto", "create-drop");
    EntityManagerFactory programmaticEmf =  Persistence.createEntityManagerFactory("manager1", configOverrides);
注: 启动时,ClassLoader.getResource("META-INF/persistence.xml")

2.实体 
@Entity
public class Employee {
  age ;
  setxxx();
}
总结:
每个实体必须有 ID,映射到主键,ID 必须定义在等级实体树的根上/超类上
ID应该是简单类型
  @id实体中的单个字段/属性
  @GeneratedValue可以采用几种策略自动生成值
      SEQUENCE
      TABLE
      IDENTITY
      AUTO
ID可以是用户定义的类(联合主键)
@Entity声明实体bean,类级别定义.基于字段/基于方法的持久化
@id 定义id属性,相当于Hibernate中的OID.这两个注解必须显式指定,其他的映射是隐  式(默认)的.根据采用的注解位置(字段注解/方法注解),Hibernate会采用相应的访问类型 (access=field|property).EJB3规范在被访问的元素类型上声明注解.比如方法访问,需要在getXXX上声明注解,字段级访问 就在属性上声明注解.不支持混合使用.Hibernate会通过@id/@Embeddedid的位置来判断采用哪种访问方式.

3.实体管理器 
  EntityManagerFactory emf =  Persistence.createEntityManagerFactory("manager1")
  EntityManager em = emf.createEntityManager();
  em.xxx();
  em.close();
  emf.close();

4.事务类型 
Resource-local事务
JTA(Java Transaction Api)多个资源参与(多个数据库)
XA(分布式XA资源)
总结:
事务类型定义在持久化单元中 (persistence.xml)
  Jee环境中默认是JTA
  J2se环境中默认是Resource-local

5.@TransactionAttribute 注解 
    TransactionAttributeType.REQUIRED
    TransactionAttributeType.REQUIRES_NEW
    TransactionAttributeType.MANDATORY
    TransactionAttributeType.NOT_SUPPORTED
    TransactionAttributeType.NEVER
    TransactionAttributeType.SUPPORTS

6.JPA的CRUD操作 
EntityManager
相当于 hibernate 中的 session.控制实体的生命周期.
    Persist()
    Remove()
    Merge()
    Refresh()
CRUD的API方法:
    em.persist(order);
    em.find(Order.class,new Long(1));
    em.remove(order);
    em.merge(order);

7.JPA的映射 
1)映射clob/blob
  @Lob
  @Basic(fetch=FetchType.LAZY)
  protected byte[] picture;
注释:
mysql数据库在映射boolean类型时,数据库中的类型默认建成bit类型,查询出错,   @Lob会生成blob类型.都需要手动进行修改.没有给出在注解中显示指定字段类型的属性.

2)指定表
  @Table(name="USERS")
  public class User
  @Table(name="CATEGORIES",
         uniqueConstraints=
            {@UniqueConstraint(columnNames={"CATEGORY_ID"})})
  uniqueConstraints只用于在自动建表时为某些列添加唯一性约束.
3)映射列:@Column(name="USER_ID")
4)临时字段:@Transient
5)组成关系:@Embeddable[相当于hibenrate的component]
6)映射 Embeddable类: @Embedded ,可以通过@AttributeOverride注解来覆盖Embeddable类中指定字段属性.更新地址属性的问题.
7)映射实体到多个表:
  @Entity
  @Table(name="users")
  @SecondaryTable(name="user_photos", pkJoinColumns=@PrimaryKeyJoinColumn(name="USER_ID"))
  public class User implements Serializable {
    ..
    @column(table="user_photos",name="photo")
    private byte[] getPhoto(){..}
8)生成主键值:
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @Column(name="user_id")
  protected Long userId;
SEQUENCE和TABLE策略都必须先定义生成器之后才能使用.
序列:@SequenceGenerator(name="user_seqgen",
                   sequenceName="seq_users",
                   initialValue=1, allocationSize=10)
9)序列表生成器
  @TableGenerator (name="tabgen_person",
                   table="table_persons_id",
                   pkColumnName="pk",
                   valueColumnName="pkvalue",
                   pkColumnValue="pkvalue"),
                   allocateSize=10)
  @Id
  @GeneratedValue(strategy=GenerationType.TABLE,
                  generator="tabgen_person ")
  @Column(name="id")
  protected Long userId;
  生成的表含有两个字段:主键列字段和值列字段.该表只有一条记录.所以还要给主键列指定主键值. 默认的主键生成策略       @GeneratedValue(strategy=GenerationType.AUTO)
原创粉丝点击