jpa中persistence.xml配置:
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
</properties>
其中第二个配置项的value可取值:
validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
create-drop 加载hibernate时创建,退出是删除表结构
update 加载hibernate自动更新数据库结构
none 应该是不做任何操作
JPA:用于规范现有的ORM技术,面对JPA规范编程,是一种标准,而如hibernate、JDO、Toplink则是对应的产品
包括3方面的技术:
1、ORM映射元数据:支持XML和JDK5.0注解,元数据描述对象和表之间的映射关系
2、Java持久化API:操作实体对象,执行CRUD操作
3、查询语言JPQL:
hibernate核心包:distribution,注解包:annotations以及针对JPA的实现包entitymanager
事务类型:本地事务和全局事务
转账:1、mysql 2、Oracle
1>update mysql set amount=amount-XX where id = XXX(mysql)
2>update mysql set amount=amount+XX where id = YYY(Oracle)
使两个语句在同一事务中执行
jdbc时需要设置连接
connection1-->mysql,connection1.setAutoCommit(false),
connection2-->oracle,connection2.setAutoCommit(false),
执行语句,
再Commit
但一个事务只能在一个connection中提交,所以就需要全局事务
全局事务:
JTA.getUserTransaction().begin();
执行操作
JTA.getUserTransaction().commit);
2次提交协议:先预提交数据库,数据库返回提交结果boolean值,如果所有操作都是true,则真正提交,否则事务失败,回滚
GenerationType.TABLE以表的方式生成组件值(还不清楚)