hibernate 一对多的保存问题,望赐教

one
public class DCompany extends BaseEntity {

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

/**
 * 公司标识
 */
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
private String comId;
/**
 * 公司名称
 */
private String comName;
/**
 * 用户信息
 */
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "comId")
private List<DUser> users;
/**
 * 公司地址
 */
private String comAddress;
/**
 * 公司经营类别
 */
private String comType;
/**
 * 公司简介
 */
private String comIntro;
/**
 * 公司电话
 */
private String comTel;
/**
 * 增加时间
 */
private String comCreateDate;

many
public class DUser extends BaseEntity {

/**
 * 
 */
private static final long serialVersionUID = -7733922431721279323L;
/**
 * 用户标识
 */
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
private String userId;
/**
 * 姓名
 */
private String userName;
/**
 * 所属公司信息
 */
@ManyToOne
@JoinColumn(name = "comId")
private DCompany company;
/**
 * 性别标识M.男F.女
 */
private String userSex;
/**
 * 密码
 */
private String userPass;
/**
 * Email
 */
private String userEmail;
/**
 * 电话
 */
private String userTel;
/**
 * qq
 */
private String userQq;
/**
 * 是否冻结 0冻结 1正常
 */
private Integer userEnable;
/**
 * 创建时间
 */
private Timestamp userCreateDate;

现在数据库里的数据都是空的,没有记录,我想实现的是DCompany 和DUser一起保存在数据库中

比如jsp页面文本框信息如下:

公司名:
公司地址:
公司电话:
姓名:
性别:
QQ:

也就是页面上一次录入DCompany 实体信息与DUser实体信息,然后一点保存,分别把DCompany 信息保存到DCompany 表,DUser信息保存到DUser表中

我的测试代码是这么写的:

DCompany company = new DCompany();
company.setComName("北京时间有限公司");
company.setComAddress("朝阳区酒仙桥1号");
company.setComIntro("介绍信息写这里");
company.setComTel("010-38782121");
company.setComType("test");
DUser user = new DUser();
user.setUserName("test");
user.setUserEmail("test@188.com");
user.setUserPass("123afb");
user.setUserEnable(1);
user.setUserSex("M");
user.setUserTel("13811112121");
user.setUserQq("21232221");

    List list = new ArrayList();
    list.add(user);
    company.setUsers(list);
    companyService.saveCompany(company);

可是保存不进去,DUser表里有comId,这样以来如果没有先保存DCompany 信息是不会有comId的,报错
object references an unsaved transient instance - save the transient instance before flushing: org.wdj.base.entity.DUser; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.wdj.base.entity.DUser

请问 该如何做呢,谢谢

3个回答

报的下面的这个错误是因为你这两个类之间没有设置级联.
object references an unsaved transient instance - save the transient instance before flushing: org.wdj.base.entity.DUser; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.wdj.base.entity.DUser

也就是说DCompany对象时,DCompany类中定义的DUser不会自动保存,
所以你要在DCompany中DUser上这样设置:
[code="java"]
@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name = "comId")
private Set users = new HashSet();
[/code]
注意:我们一般使用Set,而不是List

完整的代码:
[code="java"]

public class DCompany extends BaseEntity {

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

/**
 * 公司标识
 */
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
private String comId;
/**
 * 公司名称
 */
private String comName;
/**
 * 用户信息
 */
@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name = "comId")
private Set<DUser> users = new HashSet<DUser>();
/**
 * 公司地址
 */
private String comAddress;
/**
 * 公司经营类别
 */
private String comType;
/**
 * 公司简介
 */
private String comIntro;
/**
 * 公司电话
 */
private String comTel;
/**
 * 增加时间
 */
private String comCreateDate;

}
[/code]

[code="java"]
public class DUser extends BaseEntity {

/**
 * 
 */
private static final long serialVersionUID = -7733922431721279323L;
/**
 * 用户标识
 */
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
private String userId;
/**
 * 姓名
 */
private String userName;
/**
 * 所属公司信息
 */
@ManyToOne
@JoinColumn(name = "comId")
private DCompany company;
/**
 * 性别标识M.男F.女
 */
private String userSex;
/**
 * 密码
 */
private String userPass;
/**
 * Email
 */
private String userEmail;
/**
 * 电话
 */
private String userTel;
/**
 * qq
 */
private String userQq;
/**
 * 是否冻结 0冻结 1正常
 */
private Integer userEnable;
/**
 * 创建时间
 */
private Timestamp userCreateDate;

}

[/code]

希望能帮助你.

用saveOrUpdate方法试试

[quote]DUser user = new DUser();
user.setUserName("test");
user.setUserEmail("test@188.com");
user.setUserPass("123afb");
user.setUserEnable(1);
user.setUserSex("M");
user.setUserTel("13811112121");
user.setUserQq("21232221"); [/quote]
可定没有comId,user.setCompany(company)那?你指望它自动给你注入?我不记得它怎么知道你要注入的是哪个Dcompany对象?找不到吧?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
hibernate 一对多级联保存问题
hibernate 一对多级联保存时,保存完一方和多方的对象后,怎又去更新多方的对象,为何?不明白,请教下 [b]问题补充:[/b] 是级联保存的,hibernate会先保存一方对象,再保存多方对象,再又去更新多方的所有对象,我想知道Hibernate这样做的用意何在?
求hibernate 一对多级联删除问题,望赐教
DUser表为1,DCompany 为多,DCompany 中的@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)不能删除,应为需要保存DCompany 时,同时也级联保存DUser信息,现在的问题的,我想删除DUser,可以报错 deleted object would be re-saved by cascade (remove deleted object from,删除失败,该如何处理呢,谢谢了,还有一个问题就是一个网友告诉我一对多一般都是set,即如下 # /** # * 用户信息 # */ # @OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY) # @JoinColumn(name = "comId") # private Set<DUser> users = new HashSet<DUser>(); 我用的是list,请问有什么说道吗,谢谢 删除代码为: [code="java"] @Test public void del() { DUser user = userService.findById("4028805527c3648d0127c36490560002"); System.out.println(user.getUserName()); userService.remove(user); } [/code] [code="java"] public class DUser extends BaseEntity { /** * */ private static final long serialVersionUID = -7733922431721279323L; /** * 用户标识 */ @Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid") private String userId; /** * 姓名 */ private String userName; /** * 所属公司信息 */ @ManyToOne (cascade = CascadeType.ALL) @JoinColumn(name = "comId") private DCompany company; /** * 性别标识M.男F.女 */ private String userSex; /** * 密码 */ private String userPass; /** * Email */ private String userEmail; /** * 电话 */ private String userTel; /** * qq */ private String userQq; /** * 是否冻结 0冻结 1正常 */ private Integer userEnable; /** * 创建时间 */ private Timestamp userCreateDate; [/code] [code="java"]public class DCompany extends BaseEntity { /** * */ private static final long serialVersionUID = 2472916124848152035L; /** * 公司标识 */ @Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid") private String comId; /** * 公司名称 */ private String comName; /** * 用户信息 */ @OneToMany(mappedBy = "company", cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "comId") private List<DUser> users; /** * 商品信息 */ @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "comId") private List<DGoods> goods; /** * 公司地址 */ private String comAddress; /** * 公司经营类别 */ private String comType; /** * 公司简介 */ private String comIntro; /** * 公司电话 */ private String comTel; /** * 增加时间 */ private String comCreateDate;[/code] 我现在这么弄的 DUser user = userService.findById("4028805527c3648d0127c36490560002"); user.setCompany(null); userService.remove(user); 可以删除了,不是是不是最理想的状态,另外在问下 删除user信息的时候是先根据id查出DUser对象,然后在删除DUser对象 这样在数据库中就导致了生成两条sql语句 1.select * from user where id ... 2.delete from user where id .... 这样会不会影响效率呢,如果直接用hql删除会不会更好些 另外 DUser user = userService.findById("4028805527c3648d0127c36490560002"); findById的时候是用load好呢还是get好呢,谢谢了,在次感谢
hibernate一对多级联保存问题
这是两个类 这是一端 ``` @Entity public class Payroll implements Serializable{ /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column private long pid; @Column private long sid; //结账日期 @Column private Timestamp date; //累结 @Column private double totalSum; //结余 @Column private double balance; //伙食费用 @Column private double boardWages; //扣款 @Column private double deduct; //欠款 @Column private double debt; ///预支 @Column private double advance; //薪水细则 @OneToMany(mappedBy="payroll",cascade = CascadeType.ALL, fetch = FetchType.LAZY) @Column private List<PayrollRow> payrollRow; public long getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public double getTotalSum() { return totalSum; } public void setTotalSum(double totalSum) { this.totalSum = totalSum; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } public double getBoardWages() { return boardWages; } public void setBoardWages(double boardWages) { this.boardWages = boardWages; } public double getDeduct() { return deduct; } public void setDeduct(double deduct) { this.deduct = deduct; } public double getDebt() { return debt; } public void setDebt(double debt) { this.debt = debt; } public double getAdvance() { return advance; } public void setAdvance(double advance) { this.advance = advance; } public Timestamp getDate() { return date; } public void setDate(Timestamp date) { this.date = date; } public long getPid() { return pid; } public void setPid(long pid) { this.pid = pid; } public List<PayrollRow> getPayrollRow() { return payrollRow; } public void setPayrollRow(List<PayrollRow> payrollRow) { this.payrollRow = payrollRow; } public void setSid(long sid) { this.sid = sid; } } ``` 这是多端 ``` @Entity @Table(name = "payroll_row") public class PayrollRow implements Serializable{ /** * */ private static final long serialVersionUID = 1L; @Id @Column private long prid; @Column(name="style_number") private String styleNo; @Column private String process; @Column private int count; @Column private double cost; @Column private double amount; @ManyToOne(cascade=CascadeType.REFRESH,optional=false,fetch = FetchType.LAZY) @JoinColumn(name="pid") private Payroll payroll; public Payroll getPayroll() { return payroll; } public void setPayroll(Payroll payroll) { this.payroll = payroll; } public String getStyleNo() { return styleNo; } public void setStyleNo(String styleNo) { this.styleNo = styleNo; } public String getProcess() { return process; } public void setProcess(String process) { this.process = process; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public double getCost() { return cost; } public void setCost(double cost) { this.cost = cost; } public double getAmount() { return amount; } public void setAmount(double amount) { this.amount = amount; } public long getPrid() { return prid; } public void setPrid(long prid) { this.prid = prid; } } ``` 一开始将PayrollRow的list赋值给Payroll一端只保存一端失败 后来把PayrollRow里面的Payroll进行赋值 两者关联起来 结果还是只保存了Payroll的数据 请问何解 还有我如果想只通过一端保存来保存两个表的信息该怎么做 谢谢 按一楼修改后执行如下语句 ``` payroll.setPid(30); List<PayrollRow> pwl = payroll.getPayrollRow(); for (int i = 0;i<pwl.size();i++) { pwl.get(i).setPayroll(payroll); } payroll.setPayrollRow(pwl); payrollService.save(payroll); ``` 结果控制台输出的sql语句没有insert 只有这 Hibernate: select payrollrow_.prid, payrollrow_.amount as amount2_5_, payrollrow_.cost as cost3_5_, payrollrow_.count as count4_5_, payrollrow_.payroll_id as payroll_7_5_, payrollrow_.process as process5_5_, payrollrow_.style_number as style_nu6_5_ from payrollrow payrollrow_ where payrollrow_.prid=?
hibernate一对多级联保存机制是什么
Configuration configuration = new Configuration().configure(); SessionFactory sessionFactory = configuration.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Order order = new Order(); order.setOrderName("订单2"); Ticket ticket = new Ticket("优惠券1",order); Ticket ticket1 = new Ticket("优惠券2",order); order.getTickets().add(ticket); order.getTickets().add(ticket1); session.save(order); transaction.commit(); session.close(); sessionFactory.close(); ``` 我明明只执行了订单order的save操作,其中一个order对应多个ticket优惠券,为什么输出的sql中 是执行了对应的三个insert语句后,又执行了两次ticket优惠券的update?这里的update语句是干啥的,一对多级联保存机制是什么 ``` 这是打印的sql: Hibernate: insert into bc_order (orderName) values (?) Hibernate: insert into bc_ticket (ticketName, orderId) values (?, ?) Hibernate: insert into bc_ticket (ticketName, orderId) values (?, ?) Hibernate: update bc_ticket set orderId=?, p_index=? where ticketId=? Hibernate: update bc_ticket set orderId=?, p_index=? where ticketId=?
请教一个hibernate的保存一对多实例的问题。
假如我在数据库有class和student两个表,他们是一对多的关系,设置了外键,映射等该设置的都OK了。我现在创了两个student实例S1 S2里面都有数据,然后添加到class的实例C1里面,最后,我调用classDAO的保存C1,提交。最后我打开后台数据库查看,class表里面确实保存信息了,但是student表里面还是空的。我想问下是不是保存C1的时候,还要再写一句话保存S1和S2,这样两个表里面才都有数据。如果是这样的话,为什么我看到的很多书上的例子,都是只保存了C1,然后S1和S2貌似也都自动保存了。请教下hibernate会自动保存一对多的这种实例吗?
hibernate 一对多查询集合封装的问题
<p>首先祝大家端午节快乐。 <br>最近学习hibernate,正用用他做博客,遇到个问题研究两天了也没研究出个什么。 <br>hibernate一对多集合封装的问题,看文档一对多关联set配置中是主键和外键关联, <br>能不能设置这两个表中任意两个字段关联。google也没搜到(可能是我笨)。 <br>不过有种方法通过HQL关联:</p> <pre name="code" class="sql">select tableone ,tablemany from tableone tablemany where tableone.uuid=tablemany.uuid </pre> <p> <br>可这样代表多的关系的那个表(tablemany)hibernate怎么给他封装成成集合? <br>如果我没说明白回复下我在补充。 <br>研究东西总受折。程序员真不易啊。 <br>秀下博客,快做完了就差这块了。 <br><br><br><img src="/upload/attachment/108737/96f678da-9f65-38ca-92f8-0bfa2217591d.jpg" alt=""><br><br><br><img src="/upload/attachment/108739/7b89e181-2b67-3f15-a2bf-33e74f7bbe49.png" alt=""><br> 晕了,没人回答?<br></p>
hibernate一对多级联保存更新出问题,但可以级联删除
hibernate级联删除可以,但是级联保存和更新都不行,是配错了什么吗, @ManyToOne @JoinColumn(name = "customerId") @Cascade({ CascadeType.ALL }) @OneToMany(fetch = FetchType.EAGER) @JoinColumn(name = "customerId") @Cascade({ CascadeType.ALL })
hibernate一对多双向级联问题,删除数据问题
有三个类 班级 classes 小组 group 学生 student 班级和小组是一对多双向级联 小组和学生是一对多双向年级联 在hibernate做删除小组操作时,会把不相关的班级信息全部删掉,还会报错 Could not execute JDBC batch update 感觉应该是注解写的有问题 配置如下 classes{ List<group> list; @OneToMany( cascade = CascadeType.ALL, fetch = FetchType.LAZY) public List<group> getList() { return symbols; } public void setSymbols(List<group> list) { this.list = list; } } group{ private classes cl; private List<student> list; @OneToMany( cascade = CascadeType.ALL, fetch = FetchType.LAZY) public List<student> getList() { return symbols; } public void setSymbols(List<student> list) { this.list = list; } @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) public classes getCl() { return cl; } public void setClasses(classes cl) { this.cl = cl; } } student{ private group gp; @ManyToOne( cascade = CascadeType.ALL, fetch = FetchType.LAZY) public group getGp() { return gp; } public void setGp(group gb) { this.gp = gp; } }
关于hibernate 一对多插入数据的问题
现在出现了一个问题, 主表和副表通过1对多的关系关联配置,所有的配置都完成了。 在做关联处理时,副表的查询是成功的,但是在对副表进行插入数据的处理时, 数据不能被插入,从打印的日志来看,副表的insert语句都没有被执行, 请问有没有人遇到过这种问题?是什么原因造成的?谢谢
hibernate一对多查询问题
我想用hibernate查询得到的list集合转化为json后是这种效果[{"分类id":"1","商品":[{"分类id":"1","name":".商品1"},{"分类id":"1","name":"商品2"}]},{"分类id":"2","商品":[{"分类id":"2","name":"商品4"},{"分类id":"2","name":"商品5"}]}] 能不能实现啊
Hibernate一对多一次提交如何处理?
最近使用Hibernate做一个POC项目,其中关于一对多新增、修改功能时碰到了一些疑惑。因为以前没怎么用过Hibernate,所以请大家帮忙看看: 1、一对多修改时,一次提交上来的子表集合的处理。我看了很多Hibernate的介绍,提到的都是一对多级联更新、级联删除等,但是在实际应用中,一个可能的情况是:在一次一对多的修改中,即有对子表的新增、又有对子表的修改和删除这三个操作。举个简单的例子:一个客户Customer有多个的关联地址Address。那么在修改客户信息的页面中,存在着一个所有关联地址的列表,在该列表中可以新增一个地址,也可以修改某个地址,又或者是删除某个地址。当整个修改工作结束后,才会点击提交。这时后台的代码接收到的Customer对象中的地址就包括了新增和修改的记录,同时没有被删除的记录。 对于这种情况,Hibernate能够处理吗?或者说这已经不是Hibernate要解决的问题,应该由应用自己处理不同的情况?我用过merge和saveOrUpdate都不行。 2、第二个问题与Hibernate没有关系,但也是在一对多关系中比较常见的一个问题:一对多在新增时,采用分次提交的方式,即主表和子表的每条记录都是各自提交的方式。现在有个需求是子表的列表需要在主表的新增页面中出现,即当新增主表时,新增页面中有个空的子表的列表,在子表列表中可以新增、修改、删除。这时候就存在着一个问题:主表还没有新增,那么子表新增时就会存在着外键约束的问题。以前我们采取的方式是在进入新增页面时先有个简单的向导页面,产生一条主表的记录,其中大部分字段的值为null,但是这种方式要求主表的绝大部分字段必须为可空的才行。不知道大家有没有什么其它的处理方式? [b]问题补充:[/b] 关于第一个问题,我们以前的做法是:如果只是两层关联关系,那么通常是先将子表的所有数据全部删除,然后再插入从页面提交的列表记录,而不需要区分新增不是修改。而如果层次超过两层,则只能采取遍历的方式,即先查询出子表的所有关联的记录,然后判断是否在页面提交的列表中,如果没有则删除,除此之外就是区分页面提交的列表记录中哪些是新增、哪些是修改的。 现在有了Hibernate之后,我就想是不是可以直接merge主表对象就能达到这种目的,或者是先查询出主表对象,然后采用Customer.getAddresses().clear()将所有子表删除,然后再merge主表。但是好像都不行,所以就不知道在Hibernate所推荐的开发方式中,如何处理好上面那两种情况?
关于hibernate一对多的查询问题(join的使用)!
我的HQL语句如下: [code="java"] def hql = new StringBuffer("SELECT ci FROM CarInfo ci join ci.drivers cds WHERE 1 = 1 ") [/code] 说明: CarInfo : 车辆信息表 每辆车有多个驾驶员驾驶。也就是一辆车对应多个驾驶员(set),我想通过驾驶员查找所对应的车辆,条件语句如下: [code="java"] if(params.driverName) hql << "AND cds.account.name LIKE '%${params.driverName}%' " [/code] %${params.driverName}% 为页面获取的参数,即驾驶员姓名 VO如下: CarInfo: [code="java"] class CarInfo implements Comparable { String carNo // 车牌编号 String brand // 品牌 String type // 型号 Date buyDate // 购买日期 Department dept // 所属部门 byte[] photo // 照片 String photoFileName Integer onDuty // 特殊情况下,是否值班车辆 Integer flag // 标志 Users fgLeader // 分管领导 String memo // 备注 SortedSet drivers SortedSet carCfgs static hasMany = [drivers : DriverInfo, carCfgs: CarCfg]    其它略。。。 } [/code] DriverInfo: [code="java"] class DriverInfo implements Comparable { Account account String driverLicense // 驾照类型 Integer flag String memo SortedSet cars static belongsTo = CarInfo   static hasMany = [cars : CarInfo]   其它略。。。 } [/code] Account: [code="java"] class Account { Long id Long account String name String sex String pid String dept String sno String flag 其它略。。。 } [/code] 使用的是Grails、Groovy 问题如下: [code="java"] Caused by: org.codehaus.groovy.grails.orm.hibernate.exceptions.GrailsQueryException: Invalid query [SELECT ci FROM CarInfo ci join ci.drivers cds WHERE 1 = 1] for domain class [class CarInfo] at CarInfoService.getList(CarInfoService.groovy:18) at CarInfoService$$FastClassByCGLIB$$4df581d3.invoke(<generated>) at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) at CarInfoService$$EnhancerByCGLIB$$9ec3182d.getList(<generated>) at CarInfoService$getList.call(Unknown Source) at CarInfoController$_closure2.doCall(CarInfoController.groovy:21) at CarInfoController$_closure2.doCall(CarInfoController.groovy) [/code] 改为left join 和 right join都不行!请教hibernate高手。 而另外一个放到子查询里的join就可以执行,代码如下: [code="java"] def hql = new StringBuffer("FROM Account a WHERE TRIM(a.sno) IS NOT NULL ") if(params.carNo) hql << "AND TRIM(a.id) IN (SELECT di.account.id FROM DriverInfo di join di.cars cs WHERE cs.carNo LIKE ('%${params.carNo}%')) " [/code]
easyui +hibernate 一对多绑值问题
配置没有问题用的注解 查询没问题 就是绑不是去值![图片说明](https://img-ask.csdn.net/upload/201802/27/1519703677_937805.png) ![图片说明](https://img-ask.csdn.net/upload/201802/27/1519703561_518405.png) ![数据库的数据图片说明](https://img-ask.csdn.net/upload/201802/27/1519703763_452075.png) ![返还的json数据图片说明](https://img-ask.csdn.net/upload/201802/27/1519716026_634342.png) 在数据库中如果没有重复的id就可以绑定成功,但是有重复的话话,就在他原本的数据下有个集合,绑不上
Hibernate一对多双向关联,如何才能级联时保存而不更新?
<p>我是一个菜鸟,我在学习Hibernate时遇到一个问题: <br />比如两个类Class(教室),Student(学生)是一对多的关系。并且双向关联,而在Classes的hbm映射中包含Student的set中有属性inverse=true和cascade=all。如果Class中有一个属性需要更新,然后调用了session.update(class);的方法进行更新。Class的那个属性的确是更新了,但是同样也把Class关联的所有的Student更新了一次,比如Class中有60个Student就多更新了60次。但是其实Student中并没有属性改动的。那多发出了这么多更新的SQL语句,肯定要影响性能,我想问问这应该怎么办呀。怎么才能在更新Class时不级联更新Student呢?Classes必须要级联保存Student,但是不需要更新,应该怎么做啊? <br /></p> <p> </p><br /><strong>问题补充:</strong><br />cascade没有save的属性吧
hibernate一对多的删除问题(郁闷)
one : <set name="precontracts" inverse="false" lazy="false" cascade="all"> <key> <column name="SCHEDULE_ID" precision="8" scale="0" not-null="true" /> </key> <one-to-many class="com.oa.beans.Precontract" /> </set> many: <many-to-one name="schedule" class="com.oa.beans.Schedule" fetch="select" update="false" cascade="all"> <column name="SCHEDULE_ID" precision="8" scale="0" not-null="true" /> </many-to-one> Schedule.java: public class Schedule implements java.io.Serializable { // Fields private Long scheduleId; private Meetinginfo meetinginfo; private String title; private String address; private Date begintime; private Date endtime; private String schcontent; private Userinfo userinfo; private Date createtime; private Long ifprivate; private Set precontracts = new HashSet(0); // Constructors // Property accessors public Long getScheduleId() { return this.scheduleId; } public void setScheduleId(Long scheduleId) { this.scheduleId = scheduleId; } public Meetinginfo getMeetinginfo() { return this.meetinginfo; } public void setMeetinginfo(Meetinginfo meetinginfo) { this.meetinginfo = meetinginfo; } public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; } public String getAddress() { return this.address; } public void setAddress(String address) { this.address = address; } public Date getBegintime() { return this.begintime; } public void setBegintime(Date begintime) { this.begintime = begintime; } public Date getEndtime() { return this.endtime; } public void setEndtime(Date endtime) { this.endtime = endtime; } public String getSchcontent() { return this.schcontent; } public void setSchcontent(String schcontent) { this.schcontent = schcontent; } public Date getCreatetime() { return this.createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public Long getIfprivate() { return this.ifprivate; } public void setIfprivate(Long ifprivate) { this.ifprivate = ifprivate; } public Set getPrecontracts() { return this.precontracts; } public void setPrecontracts(Set precontracts) { this.precontracts = precontracts; } public Userinfo getUserinfo() { return userinfo; } public void setUserinfo(Userinfo userinfo) { this.userinfo = userinfo; } } Precontract.java: public class Precontract implements java.io.Serializable { // Fields private Long precontractId; private Userinfo userinfo; private Schedule schedule; // Constructors /** default constructor */ public Precontract() { } /** full constructor */ public Precontract(Userinfo userinfo, Schedule schedule) { this.userinfo = userinfo; this.schedule = schedule; } // Property accessors public Long getPrecontractId() { return this.precontractId; } public void setPrecontractId(Long precontractId) { this.precontractId = precontractId; } public Userinfo getUserinfo() { return this.userinfo; } public void setUserinfo(Userinfo userinfo) { this.userinfo = userinfo; } public Schedule getSchedule() { return this.schedule; } public void setSchedule(Schedule schedule) { this.schedule = schedule; } } 异常: org.springframework.jdbc.UncategorizedSQLException: Hibernate flushing: Could not execute JDBC batch update; uncategorized SQLException for SQL [update OA.PRECONTRACT set SCHEDULE_ID=null where SCHEDULE_ID=?]; SQL state [72000]; error code [1407]; ORA-01407: 无法更新 ("OA"."PRECONTRACT"."SCHEDULE_ID") 为 NULL ; nested exception is java.sql.BatchUpdateException: ORA-01407: 无法更新 ("OA"."PRECONTRACT"."SCHEDULE_ID") 为 NULL
hibernate 枚举一对多该怎么做?
例如说我有个类用户,还有个角色枚举。那么如果一个用户有多个角色枚举的标签的话,想用hibernate的一对多,那么怎么对枚举进行映射。跪求一个解决方案,角色枚举只能是枚举。不用一对多也可以。
关于Hibernate一对一用多对一取代的问题
最近看了很多关于hibernate优化方面的帖子,发现不少帖子有:“不用一对一,用多对一取代”,但是我个人不明白为什么?于是在网上寻找相关问题的答案无果,提问这样做有什么好处?
关于hibernate单向一对多的一个问题
一个学生一个班级,班级一对多学生,班级中有一个Set里面存放学生,我执行下面的代码 ``` @Test public void testUpdateStuToNewClass(){ Session session = factory.openSession(); Transaction transaction = session.beginTransaction(); Student stu = session.get(Student.class, 2L); Classes clazz = new Classes(); clazz.setCname("2班"); Set<Student> students = new HashSet<Student>(); students.add(stu); clazz.setStudents(students); transaction.commit(); session.close(); } ``` 我并没有session.save(classes),但是为什么会执行insert和update呢,classes不是临时状态的么 hibernate生成的sql如下 ``` Hibernate: select student0_.pid as pid1_1_0_, student0_.pname as pname2_1_0_, student0_.description as descript3_1_0_ from Student student0_ where student0_.pid=? Hibernate: select max(cid) from Classes Hibernate: insert into Classes (cname, cid) values (?, ?) Hibernate: update Student set cid=? where pid=? ```
hibernate一对一主键问题
我有两个表(A,B),设置了一对一的双向关联,数据库是mysql,A表设置了主键自动增加,而B表的主键是根据A表的主键生成的,就是两个表共用了A表的主键,现在对数据的添加,删除,查询都是没问题的,但是更新就会报错:org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update java.sql.BatchUpdateException: Duplicate entry '3' for key 'PRIMARY' 应该是主键重复了,网上也是这么说的,但是不知道怎么解决,级联我也设置了,cascade="all"!请问应该怎么解决!谢谢了!
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Android性能优化(4):UI渲染机制以及优化
文章目录1. 渲染机制分析1.1 渲染机制1.2 卡顿现象1.3 内存抖动2. 渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView 在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有三个步骤,即m...
微服务中的Kafka与Micronaut
今天,我们将通过Apache Kafka主题构建一些彼此异步通信的微服务。我们使用Micronaut框架,它为与Kafka集成提供专门的库。让我们简要介绍一下示例系统的体系结构。我们有四个微型服务:订单服务,行程服务,司机服务和乘客服务。这些应用程序的实现非常简单。它们都有内存存储,并连接到同一个Kafka实例。 我们系统的主要目标是为客户安排行程。订单服务应用程序还充当网关。它接收来自客户的请求...
致 Python 初学者们!
作者| 许向武 责编 | 屠敏 出品 | CSDN 博客 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
SpringBoot2.x系列教程(三十六)SpringBoot之Tomcat配置
Spring Boot默认内嵌的Tomcat为Servlet容器,关于Tomcat的所有属性都在ServerProperties配置类中。同时,也可以实现一些接口来自定义内嵌Servlet容器和内嵌Tomcat等的配置。 关于此配置,网络上有大量的资料,但都是基于SpringBoot1.5.x版本,并不适合当前最新版本。本文将带大家了解一下最新版本的使用。 ServerProperties的部分源...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
爬取薅羊毛网站百度云资源
这是疫情期间无聊做的爬虫, 去获取暂时用不上的教程 import threading import time import pandas as pd import requests import re from threading import Thread, Lock # import urllib.request as request # req=urllib.request.Requ...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
HTML5适合的情人节礼物有纪念日期功能
前言 利用HTML5,css,js实现爱心树 以及 纪念日期的功能 网页有播放音乐功能 以及打字倾诉感情的画面,非常适合情人节送给女朋友 具体的HTML代码 具体只要修改代码里面的男某某和女某某 文字段也可自行修改,还有代码下半部分的JS代码需要修改一下起始日期 注意月份为0~11月 也就是月份需要减一。 当然只有一部分HTML和JS代码不够运行的,文章最下面还附加了完整代码的下载地址 &lt;!...
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问