我看hibernate输入的SQL语句发现就是一条update语句,而且语句中还包括where Id=? Id是自动编号的字段,没有insert怎么能直接update记录了呢?
解决方案 »
- jboss7在哪里配置maxPostSize参数?
- jsp题库管理系统中,页面跳转时答案的传递以及默认显示问题?
- java invoke 参数 Map 与 HashMap的问题
- XML OVER HTTP 怎么运用 开发项目 需要一些什么样的JAR包?
- 一般的企业tomcat + java5 + sql2000,需要多大的硬盘空间最好
- [请教]byte[]与字符串转换的问题
- rpc的问题?谢谢!!!
- 求助:急!tomcat 安装问题:无法找到JDK
- 请问大侠,这段struts代码如何使用<html:iterate>,
- 问一下应该使用那些东西?
- 用JBoss生成EJB的一个问题。
- struts跳转:搞得现在整个浏览器无法刷新了,各位给点建议
哦,你不是添加数据吗,怎么会出现update,不把相关的代码贴出来很难看的
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"><hibernate-mapping>
<class name="net.liwenqiu.hibernate.study.pojo.OrderList" table="orderlist">
<id name="id" column="Id">
<generator class="increment" />
</id>
<property name="objectName" column="ObjectName" />
<property name="number" column="Number" /> <many-to-one name="customer"
class="net.liwenqiu.hibernate.study.pojo.Customer"
cascade="none"
outer-join="auto"
update="true"
insert="true"
column="CustomerId"
not-null="true"
/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"><hibernate-mapping>
<class name="net.liwenqiu.hibernate.study.pojo.Customer" table="customer">
<id name="id" column="Id">
<generator class="increment" />
</id>
<property name="name" column="Name" />
<property name="email" column="Email" />
<property name="phone" column="Phone" />
<property name="address" column="Address" /> <set name="orders"
table="orderlist"
lazy="false"
inverse="true"
cascade="all"
sort="unsorted">
<key column="CustomerId"></key>
<one-to-many class="net.liwenqiu.hibernate.study.pojo.OrderList"/>
</set>
</class>
</hibernate-mapping>
package net.liwenqiu.hibernate.study.pojo;public class OrderList {
private int id;
private String objectName;
private int number;
private Customer customer; public int getId() {
return this.id;
}
public String getObjectName() {
return this.objectName;
}
public int getNumber() {
return this.number;
}
public Customer getCustomer() {
return this.customer;
} public void setId(int id) {
this.id = id;
}
public void setObjectName(String objectName) {
this.objectName = objectName;
}
public void setNumber(int number) {
this.number = number;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
increment换成native 试试
我想知道你怎么保存儿子的,你在mapping 里面用了inverse="true"
就必须指定父亲 OrderList.setCustomer(customer);
package net.liwenqiu.hibernate.study.pojo;import java.util.*;public class Customer {
private int id;
private String name;
private String email;
private String phone;
private String address; private Set orders = new HashSet(); public int getId() {
return this.id;
}
public String getName() {
return this.name;
}
public String getEmail() {
return this.email;
}
public String getPhone() {
return this.phone;
}
public String getAddress() {
return this.address;
}
public Set getOrders() {
return this.orders;
} public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setEmail(String email) {
this.email = email;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setAddress(String address) {
this.address = address;
}
public void setOrders(Set orders) {
this.orders = orders;
}}
orderList.setObjectName("ABC");
orderList.setNumber(1);
orderList.setCustomer(customer);//这里有保存的方法
customer.getOrders().add(orderList);
你的保存语句呢?没有session.save(orderList)?或者是session.update(customer)
Transaction trans = null;
try{
trans = hsession.beginTransaction();
Customer customer=hsession.load(Customer.class,id);
OrderList orderList = new OrderList();
orderList.setObjectName("ABC");
orderList.setNumber(1);
orderList.setCustomer(customer);
hsession.save(cost);
trans.commit();
}
catch (Exception e) {
e.printStackTrace();
trans.rollback();
}
finally {
hsession.close();
}
hsession.save(orderList);
刚才改错拉,你直接保存儿子看看,如果父亲是已经存在的
如果你不知道是不是new 来的,可以用saveOrUpdate()方法
inverse=true作用: 这里关系是由儿子维护的,所以如果只是往父亲里加入儿子,不给儿子设置父亲的话session.save(parent),就不会保存儿子!这里只会有insert语句
inverse="false"是指父子之间的关系由两方来维护,但性能慢,因为父亲有个孩子的集合,他无法知道哪个孩子的父亲id已经指向自己了,除了insert语句外,会多出update语句