Hibernate 多对多关联出现报错情况---Batch update returned unexpected row count from update
2017-04-19 16:09
375 查看
Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
不注意的话,还真的有点无所适从,Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1这个异常是由于主键设置为自增长,而在我们插入记录的时候设置了ID的值导致的。
Hibernate 注释@OneToOne 建立表关联实例
我的解决方案:
我是在做One-To-One级联 添加/更新 碰到的,开始还以为是我配置错误,后面经过仔细排查,发现是我在页面上写了子表ID的隐藏表单域,传到后面的时候value="" ,不是value=null,所以执行的时候hibernate判断为更新,所以报错了。我的解决方案是把ID单独传到后台,然后用代码判断是否为空,然后进行更新或者增加。
下面是我的代码:
TranOrders.java(父类):
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/0b9575a131fa8ed247546a1a5994fa0b.png)
@Entity
@Table(name = "TSPRO_TRAN_ORDERS")
public class TranOrders implements java.io.Serializable {
// Fields
private TranItem tranItem;
private TranCar tranCar;
/** default constructor */
public TranOrders() {
}
@OneToOne(cascade=CascadeType.ALL,mappedBy="tranOrders",fetch=FetchType.LAZY,optional = true)
@JoinColumn(name="id",unique=true)
public TranItem getTranItem() {
return tranItem;
}
public void setTranItem(TranItem tranItem) {
this.tranItem = tranItem;
}
@OneToOne(cascade=CascadeType.ALL,mappedBy="tranOrders",fetch=FetchType.LAZY,optional = true)
@JoinColumn(name="id",unique=true)
public TranCar getTranCar() {
return tranCar;
}
public void setTranCar(TranCar tranCar) {
this.tranCar = tranCar;
}
}
TranItem.java(子类)
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/0b9575a131fa8ed247546a1a5994fa0b.png)
@Entity
@Table(name = "TSPRO_TRAN_ITEM")
public class TranItem implements java.io.Serializable {
// Fields
private TranOrders tranOrders;
@OneToOne(fetch = FetchType.LAZY,optional=false)
@JoinColumn(name = "TSP_ID",unique=true)
public TranOrders getTranOrders() {
return this.tranOrders;
}
public void setTranOrders(TranOrders tranOrders) {
this.tranOrders = tranOrders;
}
}
TranCar.java(子类)
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/0b9575a131fa8ed247546a1a5994fa0b.png)
@Entity
@Table(name = "TSPRO_TRAN_CAR")
public class TranCar implements java.io.Serializable {
// Fields
private TranOrders tranOrders;
@OneToOne(fetch = FetchType.LAZY,optional=false)
@JoinColumn(name = "TSP_ID",unique=true)
public TranOrders getTranOrders() {
return this.tranOrders;
}
public void setTranOrders(TranOrders tranOrders) {
this.tranOrders = tranOrders;
}
}
Action(调用):
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/0b9575a131fa8ed247546a1a5994fa0b.png)
public String saveTranOrders() {
String tranItemId=super.getRequest().getParameter("tranItemId");
String tranCarId=super.getRequest().getParameter("tranCarId");
String loginUserId = (String) getSession().getAttribute(Constant.LOGIN_USER_ID);
//时间转换
String loadSort=super.getRequest().getParameter("loadSort");
String reachTime=super.getRequest().getParameter("reachTime");
String wzdTime=super.getRequest().getParameter("wzdTime");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时");
try {
if(tranOrders!=null){
tranOrders.setLoadSort(new Timestamp(sdf.parse(loadSort).getTime()));
tranOrders.setReachTime(new Timestamp(sdf.parse(reachTime).getTime()));
tranOrders.setWzdTime(new Timestamp(sdf.parse(wzdTime).getTime()));
if(BeanUtils.isNotEmpty(tranItemId)){
tranItem.setId(tranItemId);
}
if(BeanUtils.isNotEmpty(tranCarId)){
tranCar.setId(tranCarId);
}
tranCar.setTranOrders(tranOrders);
tranOrders.setTranCar(tranCar);
tranItem.setTranOrders(tranOrders);
tranOrders.setTranItem(tranItem);
if(BeanUtils.isNotEmpty(tranOrders.getId())){
tranOrders.setUpdateBy(loginUserId);
tranOrders.setUpdateDate(new Timestamp(System.currentTimeMillis()));
tranOrdersManager.update4ClearCurrSession(tranOrders);
}
tranOrders.setCreateBy(loginUserId);
tranOrders.setCreateDate(new Timestamp(System.currentTimeMillis()));
tranOrdersManager.save(tranOrders);
writerPrint("1");
}else
writerPrint("0");
} catch (Exception e) {
e.printStackTrace();
writerPrint("2");
}
return NONE;
}
不注意的话,还真的有点无所适从,Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1这个异常是由于主键设置为自增长,而在我们插入记录的时候设置了ID的值导致的。
Hibernate 注释@OneToOne 建立表关联实例
我的解决方案:
我是在做One-To-One级联 添加/更新 碰到的,开始还以为是我配置错误,后面经过仔细排查,发现是我在页面上写了子表ID的隐藏表单域,传到后面的时候value="" ,不是value=null,所以执行的时候hibernate判断为更新,所以报错了。我的解决方案是把ID单独传到后台,然后用代码判断是否为空,然后进行更新或者增加。
下面是我的代码:
TranOrders.java(父类):
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/0b9575a131fa8ed247546a1a5994fa0b.png)
@Entity
@Table(name = "TSPRO_TRAN_ORDERS")
public class TranOrders implements java.io.Serializable {
// Fields
private TranItem tranItem;
private TranCar tranCar;
/** default constructor */
public TranOrders() {
}
@OneToOne(cascade=CascadeType.ALL,mappedBy="tranOrders",fetch=FetchType.LAZY,optional = true)
@JoinColumn(name="id",unique=true)
public TranItem getTranItem() {
return tranItem;
}
public void setTranItem(TranItem tranItem) {
this.tranItem = tranItem;
}
@OneToOne(cascade=CascadeType.ALL,mappedBy="tranOrders",fetch=FetchType.LAZY,optional = true)
@JoinColumn(name="id",unique=true)
public TranCar getTranCar() {
return tranCar;
}
public void setTranCar(TranCar tranCar) {
this.tranCar = tranCar;
}
}
TranItem.java(子类)
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/0b9575a131fa8ed247546a1a5994fa0b.png)
@Entity
@Table(name = "TSPRO_TRAN_ITEM")
public class TranItem implements java.io.Serializable {
// Fields
private TranOrders tranOrders;
@OneToOne(fetch = FetchType.LAZY,optional=false)
@JoinColumn(name = "TSP_ID",unique=true)
public TranOrders getTranOrders() {
return this.tranOrders;
}
public void setTranOrders(TranOrders tranOrders) {
this.tranOrders = tranOrders;
}
}
TranCar.java(子类)
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/0b9575a131fa8ed247546a1a5994fa0b.png)
@Entity
@Table(name = "TSPRO_TRAN_CAR")
public class TranCar implements java.io.Serializable {
// Fields
private TranOrders tranOrders;
@OneToOne(fetch = FetchType.LAZY,optional=false)
@JoinColumn(name = "TSP_ID",unique=true)
public TranOrders getTranOrders() {
return this.tranOrders;
}
public void setTranOrders(TranOrders tranOrders) {
this.tranOrders = tranOrders;
}
}
Action(调用):
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/0b9575a131fa8ed247546a1a5994fa0b.png)
public String saveTranOrders() {
String tranItemId=super.getRequest().getParameter("tranItemId");
String tranCarId=super.getRequest().getParameter("tranCarId");
String loginUserId = (String) getSession().getAttribute(Constant.LOGIN_USER_ID);
//时间转换
String loadSort=super.getRequest().getParameter("loadSort");
String reachTime=super.getRequest().getParameter("reachTime");
String wzdTime=super.getRequest().getParameter("wzdTime");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时");
try {
if(tranOrders!=null){
tranOrders.setLoadSort(new Timestamp(sdf.parse(loadSort).getTime()));
tranOrders.setReachTime(new Timestamp(sdf.parse(reachTime).getTime()));
tranOrders.setWzdTime(new Timestamp(sdf.parse(wzdTime).getTime()));
if(BeanUtils.isNotEmpty(tranItemId)){
tranItem.setId(tranItemId);
}
if(BeanUtils.isNotEmpty(tranCarId)){
tranCar.setId(tranCarId);
}
tranCar.setTranOrders(tranOrders);
tranOrders.setTranCar(tranCar);
tranItem.setTranOrders(tranOrders);
tranOrders.setTranItem(tranItem);
if(BeanUtils.isNotEmpty(tranOrders.getId())){
tranOrders.setUpdateBy(loginUserId);
tranOrders.setUpdateDate(new Timestamp(System.currentTimeMillis()));
tranOrdersManager.update4ClearCurrSession(tranOrders);
}
tranOrders.setCreateBy(loginUserId);
tranOrders.setCreateDate(new Timestamp(System.currentTimeMillis()));
tranOrdersManager.save(tranOrders);
writerPrint("1");
}else
writerPrint("0");
} catch (Exception e) {
e.printStackTrace();
writerPrint("2");
}
return NONE;
}
相关文章推荐
- SSH出现:org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0];
- 关于使用S2SH,用hibernate执行删除出现的 Batch update returned unexpected row count from update: 0 actual row coun
- org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
- Hibernate:Batch update returned unexpected row count from update [0]; actual row count: 0; expected:
- Hibernate——org.hibernate.StaleStateException: Batch update returned unexpected row count from update
- 关于Hibernate的 Batch update returned unexpected row count from update异常
- org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actua
- org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actua
- Hibernate - Batch update returned unexpected row count from update: 0 actual row count: 0 expected:
- hibernate 报错: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 解决方法
- Hibernate 报错:Batch update returned unexpected row count from update [0]; actual row count
- org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actua
- hibernate中主键与unsaved-value关系(Batch update returned unexpected row count from update)
- org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual
- 关于Hibernate的 Batch update returned unexpected row count from update异常
- 关于Hibernate的 Batch update returned unexpected row count from update异常
- org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0];
- 关于Hibernate的 Batch update returned unexpected row count from update异常
- org.hibernate.StaleStateException: Batch update returned unexpected row count from upda
- org.hibernate.StaleStateException:Batch update returned unexpected row count from update [0]; actua