巴巴运动重做小记(15-25)
来源:互联网 发布:淘宝自助开通 编辑:程序博客网 时间:2024/04/29 20:18
1. JPA环境集成中需要在META-INF下配置persistence.xml,涉及相关Jar包
ojdbc14.jarejb3-persistence.jarhibernate-entitymanager.jarhibernate3.jardom4j-1.6.1.jarhibernate-annotations.jarcommons-logging.jarhibernate-commons-annotations.jarjavassist.jarcommons-collections-2.1.1.jarcglib-2.1.3.jarasm.jar
2. Log4J相关日志配置,打印相关DEBUG错误信息,可以打印到前台和后台日志
### set log levels ###log4j.rootLogger=debug,stdout,D,Elog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{ 1 }:%L - %m%nlog4j.appender.D=org.apache.log4j.FileAppenderlog4j.appender.D.File=logs/log.loglog4j.appender.D.Append=truelog4j.appender.D.Threshold=DEBUGlog4j.appender.D.layout=org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%nlog4j.appender.E=org.apache.log4j.FileAppenderlog4j.appender.E.File=logs/error.loglog4j.appender.E.Append=truelog4j.appender.E.Threshold=ERROR log4j.appender.E.layout=org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
3. Entity 生成主键策略如下
@Entity@SequenceGenerator(name="seq_producttype",sequenceName="seq_producttype")public class ProductType implements Serializable{private static final long serialVersionUID = 1L;@Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_producttype")/*类别ID*/private Integer typeid;
4. 搭建Spring还需要相关Jar包
commons-logging.jaraspectjrt.jaraspectjweaver.jarspring.jar
5. 由于Spring的beans.xml中已经配置了DataSource信息,在beans.xml中加载persistence.xml时相关连接配置需要删除
beans.xml
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource"/><property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" /></bean>persistence.xml
<persistence-unit name="oracle"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.jdbc.fetch_size" value ="18"/> <property name="hibernate.jdbc.batch_size" value ="10"/> <property name="hibernate.show_sql" value ="true"/> <property name="hibernate.format_sql" value ="true"/> </properties> </persistence-unit>
6. 父类,级联刷新,级联删除,mappedBy
@OneToMany(cascade={CascadeType.REFRESH,CascadeType.REMOVE},mappedBy="parent")
a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
b) mappedBy标签一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方);
c) mappedBy跟JoinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。
mappedBy这方定义的JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。
子类
@ManyToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name="parentid")表示数据库表中需要增加parentid的字段
7. Service层如果不写Transactional,插入数据会回滚掉。
8. em.remove(em.getReference(Entity.class, EntityId))
em.getReference不会真正去做数据库的select,而是假装把Entity的实例给你了。等你真正去做相应操作的时候由JPA Implementation决定如何去读。
操作 SQL
em.remove(em.getReference(Entity.class, EntityId))
1) delete from Entity where id = EntityId.
em.remove(em.find(Entity.class, EntityId))
1)select * from Entity where id = EntityId
2) delete from Entity where id = EntityId.
9. HQL中getScrollData函数的例子,设计的比较好,是不是HQL的范式?
@SuppressWarnings("unchecked")@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)public <T> QueryResult<T> getScrollData(Class<T> entityClass,int firstIndex, int maxResult, String wherehql, Object[] params,LinkedHashMap<String, String> orderBy) {QueryResult<T> qr = new QueryResult<T>();String entityname = getEntityName(entityClass);Query query = em.createQuery("select o from " + entityname + " o "+ (wherehql == null ? "" : ("where "+ wherehql)) + buildOrderBy(orderBy));System.out.println(query.toString());setParms(query,params);if(firstIndex!=-1 && maxResult!=-1){query.setFirstResult(firstIndex).setMaxResults(maxResult);}System.out.println(query);qr.setResultlist(query.getResultList());query = em.createQuery("select count(o) from " + entityname + " o "+ (wherehql == null ? "" : ("where "+ wherehql)));setParms(query,params);qr.setTotalrecord((Long) query.getSingleResult());return qr;}遗留问题
1. xml中xmlns,xsi,schemalocation这些命名空间分别是啥意思?
<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_1_0.xsd" version="1.0">
0 0
- 巴巴运动重做小记(15-25)
- 巴巴运动重做小记(26-39)
- 巴巴运动重做小记(40-50)
- 巴巴运动网(11--15)
- 巴巴运动网功能设计
- 传智播客教学视频-巴巴运动网
- 巴巴运动网视频后44集
- 关于巴巴运动网视频的学习
- 巴巴运动网商品交易系统的架构
- 巴巴运动网学习网址的笔记
- 巴巴运动网JPA项目错误
- 巴巴运动网技术点和功能
- 巴巴运动网商品交易系统的架构
- 巴巴运动网权限模块的设置
- 巴巴运动网的性能优化
- 项目视频讲解_巴巴运动网
- 巴巴运动网技术点和功能
- 实战项目巴巴运动网要点总结
- Win7无线网卡开软ap的方法 | 建立WIFI热点 [图文教程]
- Copy List with Random Pointer
- 常见的C语言内存错误及对策
- OpenWrt软件包的编译
- rt-thread编译环境搭建(使用arm gcc编译器)
- 巴巴运动重做小记(15-25)
- C++内存管理
- 法国留学生申请美国实习J1签证详解
- Single Number
- Understanding BGP TTL Security
- Android SDK下载/更新失败的解决办法
- PHP: CGI,FASTCGI,php-fpm,mod_php,mod_cgi,mod_fcgid
- 深入理解C语言指针的奥秘
- 黑马程序员_Java基础_其他对象及IO流(一)_18