我有父表和子表,有一对多的关系:
List<Child> list = new LinkedList<>("1","2","3","5","6");
我正在尝试这个:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from Parent where id= :id");
query.setLong("id", parent_id);
Parent parent = (Parenr) query.uniqueResult();
List<Child> children = parent.getChildren();
children.set(2, "4");
session.update(parent);
tx.commit();
session.close();
但是将值插入列表的末尾
( “1”, “2”, “3”, “5”, “6”, “4”)
如果我在提交交易之前打印出列表,则列表正确排序:(“1”,“2”,“3”,“4”,“5”,“6”) 但是在提交事务之后,值将被插入到最后。也许SQL脚本有问题?
如何正确插入?
答案 0 :(得分:1)
你确定是否插入了值?我问,因为据我所知,set()允许你替换该索引中存在的值。
因此,如果您拥有("1","2","3","5","6")
并执行了children.set(2,"4")
,那么现在您将拥有("1","2","4","5","6")
。
我建议使用add()并指定类似此children.add(2,"4")
的索引,预期结果应为("1","2","4","3","5","6")
。
PD:我也不知道这是否会导致你出现问题,但是当你进行uniqueResult()的演员表时你有(Parenr)并且它应该是(Parent)。