彬彬931120 2017-07-18 12:19 采纳率: 0%
浏览 1028
已结题

hibernate一对多添加dao层中的save方法不执行

这是dao层中的方法

    // 增加设备
    @Override
    public void addDevice(Device device) {

        try {
            String hql = "from User u where u.userName=?";
            Query query = sessionFactory.getCurrentSession().createQuery(hql);
            query.setString(0, device.getOwnerName());
            User u = (User) query.uniqueResult();
            Device device1 = new Device();
            device1.setDeviceId(device.getDeviceId());
            device1.setDeviceName(device.getDeviceName());
            device1.setOwnerName(device.getOwnerName());
            device1.setDeviceOwner(u.getRealName());
            device1.setUser(u);
            sessionFactory.getCurrentSession().save(device1);
        } catch (Exception e) {
            System.out.println(e);
        }
    }

这是设备实体类

 package com.plb.entities;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="T_DEVICE")
public class Device implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @Column(length = 32)
    private String deviceId;//设备Id

    @Column(length = 32)
    private String deviceName;//设备名称

    @Column(length=32)
    private String deviceOwner;//设备所有者

    @Column(length = 32)
    private String ownerName;//设备所有着账号

    //Device对象的ownerName和User对象的userName字段相关联,

     @ManyToOne(cascade = CascadeType.ALL, optional = false)
     @JoinColumn(name="ownerName", referencedColumnName="userName",insertable=false,updatable=false)
     private User user;

    public String getDeviceId() {
        return deviceId;
    }
    public void setDeviceId(String deviceId) {
        this.deviceId = deviceId;
    }
    public String getDeviceName() {
        return deviceName;
    }
    public void setDeviceName(String deviceName) {
        this.deviceName = deviceName;
    }

    public String getOwnerName() {
        return ownerName;
    }
    public void setOwnerName(String ownerName) {
        this.ownerName = ownerName;
    }
    public String getDeviceOwner() {
        return deviceOwner;
    }
    public void setDeviceOwner(String deviceOwner) {
        this.deviceOwner = deviceOwner;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }


}

这是用户实体类

 package com.plb.entities;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "T_USER")
public class User implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @Column(length = 32)
    private String userId;
    /*
     * @Column(length=32) private String uId;//用于和device的deviceId相关联的字段,此处不用主键关联
     */
    /*
     * @OneToMany(mappedBy="user",cascade =
     * CascadeType.ALL,fetch=FetchType.EAGER) private List<Device> device = new
     * ArrayList<Device>();
     */

    /*
     * @OneToMany //指定一对多关系
     * 
     * @Cascade(value={CascadeType.SAVE_UPDATE}) //设定级联关系
     * 
     * @JoinColumn(name="userId") private List<EmployeeBean2> emp = new
     * HashSet<EmployeeBean2>();
     */
    @Column(length = 32)
    private String userName;

    @Column(length = 32)
    private String password;

    @Column(length = 32)
    private String realName;

    @Column(length = 32)
    private String sex;

    @Column(length = 32)
    private String age;

    @Column(length = 32)
    private String email;

    @Column(length = 32)
    private String tel;

    @Column(length = 32)
    private String remark;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }
}

一个用户对应多个设备,前台传给后台一个设备id(deviceID)、设备名字(deviceName)用户账号(ownerName)和设备所有者(deviceOwner),之后根据用户账号ownerName从从用户表中查询出一个User对象user,之后再把设备Id,设备名称,用户(user)传递到新建的设备对象device1中,Debug后台所有的数据都能获得值,就是sessionFactory.getCurrentSession().save(device1)方法不执行,既不报错也不抛异常,请求各位帮忙看看。

  • 写回答

2条回答 默认 最新

  • 喵喵简历 2017-07-18 13:33
    关注

    在保存过程中不是要提交事务的么

    评论

报告相同问题?

悬赏问题

  • ¥20 求计算赫斯特(Hurst)指数
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大