映射文件见上一篇《hibernate 级联删除》
插入时候报错:
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not insert: [com.hotel.dao.Movie]; uncategorized SQLException for SQL [insert into hotel.movie (moviename, moviename_sys, director, impersonator, charge, intro, imgsrc, field1, field2) values (?, ?, ?, ?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1364]; Field 'id_movietype' doesn't have a default value; nested exception is java.sql.SQLException: Field 'id_movietype' doesn't have a default value
Caused by: java.sql.SQLException: Field 'id_movietype' doesn't have a default value
生成sql时id_movietype没有值,重新翻书查找了一下原因,是这里的多方的配置文件有问题:
配置了many-to-one 的 movietype 属性以后就应该删除idmovietype 属性。
修改后仍然是报上面的错误,再来查查hibernate的insert 属性文档:
写道
update, insert (optional - defaults to true): specifies that the mapped columns should be included in SQL UPDATE and/or INSERT statements. Setting both to false allows a pure "derived" association whose value is initialized from another property that maps to the same column(s), or by a trigger or other application.
将insert="false" 属性设置为 true,修改后的映射文件:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.hotel.dao.Movie" table="movie" catalog="hotelfidelio">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"></generator>
</id>
<property name="moviename" type="java.lang.String">
<column name="moviename" length="200" not-null="true" />
</property>
<property name="movienameSys" type="java.lang.String">
<column name="moviename_sys" length="300" not-null="true" unique="true" />
</property>
<property name="director" type="java.lang.String">
<column name="director" length="200" />
</property>
<property name="impersonator" type="java.lang.String">
<column name="impersonator" length="200" />
</property>
<property name="charge" type="java.lang.Double">
<column name="charge" precision="22" scale="0" not-null="true" />
</property>
<property name="intro" type="java.lang.String">
<column name="intro" length="16277215" />
</property>
<property name="imgsrc" type="java.lang.String">
<column name="imgsrc" length="300" />
</property>
<property name="field1" type="java.lang.String">
<column name="field1" length="20" />
</property>
<property name="field2" type="java.lang.String">
<column name="field2" length="20" />
</property>
<many-to-one
name="movietype"
class="com.hotel.dao.Movietype"
column="id_movietype"
insert="true"
update="false"
outer-join="auto"
fetch="select"
access="property"
not-null="true"
lazy="false"
>
</many-to-one>
</class>
</hibernate-mapping>
对应的java代码:
Movie movie = new Movie();
movie.setIntro(intro);
movie.setCharge(Double.parseDouble(charge));
movie.setDirector(director);
movie.setImgsrc(movieimagename_);
movie.setImpersonator(impersonator);
movie.setIntro(intro);
movie.setMoviename(moviename);
movie.setMovienameSys(moviename);
Movietype mt = this.movieOperatorInterface.getMovieType(type);
movie.setMovietype(mt);
this.movieOperatorInterface.saveMovieInfo(movie);
重新测试,问题解决:
Hibernate: insert into hotel.movie (moviename, moviename_sys, director, impersonator, charge, intro, imgsrc, field1, field2, id_movietype) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
分享到:
相关推荐
总的来说,这个项目展示了如何使用Hibernate、Ajax和DWR来实现一个高效、用户友好的省市县三级级联选择功能。开发过程中涉及了ORM、MVC架构、数据库操作以及前端交互等多个方面,是学习和实践Web开发技能的好实例。
- 插入 `Classes` 时,Hibernate 先查找最大 `C_ID`(班级ID),然后插入新的 `Classes` 记录,接着插入新的 `Student` 记录,并在插入后更新 `Student` 的 `C_ID` 以关联新插入的 `Classes`。 2. 当 `inverse=...
本示例将探讨如何在Spring与Hibernate整合的环境中实现一对一(OneToOne)映射,并进行级联操作,包括增、删、改、查。下面我们将详细讲解这一主题。 首先,一对一映射是数据库设计中的一种关系,表示两个表中的一...
本篇将详细探讨“Hibernate插入数据”的相关知识点,结合学习心得,深入理解并掌握其核心原理与实践技巧。 首先,Hibernate通过对象关系映射(ORM)技术,将数据库表与Java类关联起来,使得数据库操作可以通过对象...
在这个项目中,Hibernate用于管理数据库操作,如查询、插入、更新和删除数据。级联下拉框的数据源通常来自数据库,Hibernate可以便捷地将这些数据映射到Java对象,便于在应用程序中使用。 3. **SQLServer2000**:这...
- 配置Action:定义每个级联操作对应的Action,包括接收请求、处理业务逻辑和返回结果。 - 使用Ajax插件:Struts2有内置的Ajax支持,如JQuery插件,可以方便地发送异步请求并更新页面部分区域。 - 定义结果类型:...
- **Create(创建)**: 在Java中,通常使用JDBC(Java Database Connectivity)API或者ORM框架如Hibernate、MyBatis来插入新记录到数据库。这涉及创建SQL的INSERT语句,设置参数并执行。 - **Read(读取)**: ...
8. 自动更新和插入:Hibernate的自动更新和插入功能可以根据对象的变化自动更新数据库,但需要谨慎使用,以防止数据意外更改。 9.缓存机制:Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory...
7. **级联操作**:通过 `@OneToMany`, `@ManyToOne`, `@ManyToMany` 等注解,可以配置实体之间的关联,并设置级联操作,如级联保存、删除等。 8. **缓存**:Hibernate 支持一级缓存(Session 缓存)和二级缓存,...
10. **批处理操作**:通过设置批处理大小,Hibernate可以优化批量插入、更新和删除的性能,减少与数据库的交互次数。 11. **JPA支持**:虽然Hibernate最初是一个独立的ORM框架,但在3.5版本中,它也兼容Java ...
Hibernate是一款强大的ORM框架,它提供了完整的对象模型支持,包括实体管理、级联操作、事务处理等。它的优势在于提供了一种面向对象的方式来操作数据库,使得开发人员无需关注底层SQL的编写,提高了开发效率。然而...
此外,Hibernate支持事件监听器和拦截器,允许我们在特定操作前后插入自定义逻辑,如在对象保存前进行验证,或在对象删除后执行清理工作。 总的来说,这篇关于Hibernate的论文可能会深入剖析这些概念,并结合实例...
7. **级联操作与缓存**: Hibernate支持级联操作,比如当删除一个父对象时,可以同时删除与其关联的子对象。此外,Hibernate内置了第一级缓存(Session缓存)和第二级缓存(可配置的缓存),提高性能。 8. **事务...
5. **基本操作示例**:展示如何使用Hibernate进行插入、查询、更新和删除数据的基本示例。 6. **查询方式**:包括HQL和Criteria API的简单和复杂查询示例。 7. **一对多、多对一、一对一和多对多关联映射**:如何...
8. **级联操作(Cascading)**: 可以配置实体间的级联关系,如`@OneToMany` 和 `@ManyToOne` 的级联删除或更新。 9. **缓存机制**: Hibernate支持二级缓存,可以提高性能。一级缓存是每个`Session` 内部的缓存,二...
12. **级联操作**:通过`@Cascade`可以配置级联操作,如在删除父对象时,是否同时删除子对象。 13. ** Hibenate Validator**:Hibernate 还集成了Validator框架,用于校验实体对象的属性值,提供了一套强大的验证...
1. 插入:Session的save()或saveOrUpdate()方法,将对象持久化到数据库。 2. 更新:Session的update()方法,更新已存在的对象。 3. 删除:Session的delete()方法,删除对象。 4. 查询:HQL、Criteria API或原生SQL...
在本文中,我们将深入探讨Hibernate注解的几个核心方面:级联关系、增删改查操作、二级缓存、日志配置以及注解解析。 1. **级联关系**: Hibernate中的级联关系允许我们在一个实体的操作中自动处理与其关联的其他...
《深入理解Hibernate 5.2.10:企业级持久化框架解析》 Hibernate作为Java领域最著名的对象关系映射(ORM)框架之一,一直以来都是开发者处理数据库操作的重要工具。本文将围绕`hibernate-release-5.2.10`这一版本,...
- **dynamic-insert**: 是否动态插入 SQL 语句,仅插入非空字段。 - **select-before-update**: 更新前是否先查询实体。 - **polymorphism**: 多态映射类型。 - **where**: 在查询时添加额外的 WHERE 子句。 - **...