No1.在做级联添加的时候遇到这个问题。我就很好奇我明明已经设置了键了。而且还疯狂报错。
Hibernate:
alter table order1
add constraint FKh7uaf7dv9c5tqmopnvym4hrs6
foreign key (cumid)
references Cum (id)
后面发现。只要XML那边把auto改成none就可以了。就是下面这个。
<property name="hbm2ddl.none">update</property>
No2.莫名其妙报出Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘order LIMIT 0, 1000’ at line 1
解决方法:这里后面会提示你的冲突。如果表名和数据库关键词一致。那你就需要更改这个。
No3.Servlet.service() for servlet default threw exception org.hibernate.TransactionException: Transaction not successfully
解决方法。Hibernate 5就使用Transaction这个吧。
不要在使用session.getTransaction().commit();
换成Transaction.commit()这个错误就会消失就会正常。
No4.java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails
这一段是出错的xml代码。因为我的数据库表中id是自增的。但是xml这里我没有增加自增。所以就报了这个错。
<class name="entity.Users1Entity" table="users1" schema="shenmegui">
<id name="id">
<column name="id" sql-type="int(10)"/>
</id>
<property name="name">
<column name="name" sql-type="varchar(20)" />
</property>
<property name="password">
<column name="password" sql-type="varchar(20)" />
</property>
<property name="age">
<column name="age" sql-type="varchar(20)" />
</property>
<set name="ordersById" cascade="all" inverse="true">
<key>
<column name="user_id"/>
</key>
<one-to-many class="entity.OrdersEntity"/>
</set>
</class>
</hibernate-mapping>
然后把id的位置加上主键自增就可以了。
<id name="id">
<column name="id" sql-type="int(11)"/>
//这个native根据你使用的数据库来更改。我是mysql就用的这个。
<generator class="native" />
</id>
No5.java.lang.IllegalArgumentException: org.hibernate.QueryException
报错原因。Hibernate4.1后对占位符进行了改进。所以占位符要改为JPA占位符或者换成命名的方式 比如如下
Query query = session.createQuery("from Users1Entity where id = ?0");
Query query = session.createQuery("from Users1Entity where id = :id");
No6.一对多。多的一方的外键不会自动更新问题。 下面这个是出问题的多的一方的xml。我们会发现有2个一样的元素。所以我们需要把上面那个一样的删掉。
<hibernate-mapping>
<class name="entity.StaffEntity" table="staff" schema="Week13">
<id name="empno">
<column name="empno" sql-type="int(11)"/>
<generator class="native"/>
</id>
<property name="ename">
<column name="ename" sql-type="varchar(20)"/>
</property>
<property name="job">
<column name="job" sql-type="varchar(20)" />
</property>
<property name="hiredate">
<column name="hiredate" sql-type="datetime" />
</property>
<property name="deptno">
<column name="deptno" sql-type="int(11)"/>
</property>
<property name="sal">
<column name="sal" sql-type="int(11)" />
</property>
<property name="mgr">
<column name="mgr" sql-type="int(11)" />
</property>
<property name="comm">
<column name="comm" sql-type="int(11)" />
</property>
<many-to-one name="departmentByDeptno" class="entity.DepartmentEntity">
<column name="deptno" />
</many-to-one>
</class>
</hibernate-mapping>
变成这样↓
<hibernate-mapping>
<class name="entity.StaffEntity" table="staff" schema="Week13">
<id name="empno">
<column name="empno" sql-type="int(11)"/>
<generator class="native"/>
</id>
<property name="ename">
<column name="ename" sql-type="varchar(20)"/>
</property>
<property name="job">
<column name="job" sql-type="varchar(20)" />
</property>
<property name="hiredate">
<column name="hiredate" sql-type="datetime" />
</property>
<property name="sal">
<column name="sal" sql-type="int(11)" />
</property>
<property name="mgr">
<column name="mgr" sql-type="int(11)" />
</property>
<property name="comm">
<column name="comm" sql-type="int(11)" />
</property>
<many-to-one name="departmentByDeptno" class="entity.DepartmentEntity">
<column name="deptno" />
</many-to-one>
</class>
</hibernate-mapping>
然后就会发现外键会自动更新了 ~
No6.Spring Aoe事务出现bean无法创建。发现后缀为缺少java包。于是下载jar包导入后正常。这里还是因为我没有使用maven。使用了这个就不会有这个问题。
No7. 提示HibernateTemplate为null。这个时候你要看你xml是否对你的方法注入了HibernateTemplate。
原本我以为这样就可以正常用的了。但是一直提示null报错。所以就重新看了一下xml。发现他还是需要注入。后面注入后正常。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driverClass}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="user" value="${name}"/>
<property name="password" value="${password}"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" lazy-init="false">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<property name="mappingLocations" value="classpath:entity/*.hbm.xml"></property>
</bean>
<bean id="HibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 配置Spring声明式事务 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* DAO.daoimpl.*.*(..))" id="txPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
<bean id="DepartmentEntity" class="entity.DepartmentEntity"/>
<bean id="StaffEntity" class="entity.StaffEntity"/>
</beans>
注入HibernateTemplate
<bean id="dmimpl" class="DAO.daoimpl.dmimpl">
<!-- 注入模版对象 -->
<property name="ht" ref="HibernateTemplate"></property>
</bean>
**
No8.springMVC对get乱码解决。(修改tomcat的不太好)
**
这里因为我用的是idea 。所以自动生成了一个serlvet的xml。于是直接在xml里面添加编码格式就行了。
<mvc:annotation-driven>
<mvc:message-converters>
<beans:bean class="org.springframework.http.converter.StringHttpMessageConverter">
<beans:property name="supportedMediaTypes">
<beans:list>
<beans:value>text/plain;charset=UTF-8</beans:value>
<beans:value>text/html;charset=UTF-8</beans:value>
<beans:value>application/json;charset=UTF-8</beans:value>
</beans:list>
</beans:property>
</beans:bean>
</mvc:message-converters>
</mvc:annotation-driven>
完整代码为:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns= "http://www.springframework.org/schema/mvc"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--这里是扫描包-->
<context:component-scan base-package="controller" />
<beans:bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"/>
<beans:property name="suffix" value=".jsp"/>
</beans:bean>
<!--这里是过滤Get乱码-->
<mvc:annotation-driven>
<mvc:message-converters>
<beans:bean class="org.springframework.http.converter.StringHttpMessageConverter">
<beans:property name="supportedMediaTypes">
<beans:list>
<beans:value>text/plain;charset=UTF-8</beans:value>
<beans:value>text/html;charset=UTF-8</beans:value>
<beans:value>application/json;charset=UTF-8</beans:value>
</beans:list>
</beans:property>
</beans:bean>
</mvc:message-converters>
</mvc:annotation-driven>
</beans:beans>
No9 SpringMvc下载乱码。(过滤器好像在这里没有用)
拿到的是UTF-8的。输出给前台就必须得转ISO8859-1才不会乱码。奇葩。
@RequestMapping("/download.do")
public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam("filename") String filename, Model model) throws Exception {
String path = request.getServletContext().getRealPath("/download/");
File file = new File(path + File.separator + filename);
HttpHeaders headers = new HttpHeaders();
String downloadFileName = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
System.out.println(downloadFileName+"- - -");
headers.setContentDispositionFormData("attachment", downloadFileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
暂时在使用idea Spring+Hibernate 没有遇到其他错误了。有的话会继续更新~