java - Hibernate:更新而不是插入

标签 java hibernate

我有实体:

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(name = "name", nullable = false)
    private String name;

 @OneToMany(fetch = FetchType.LAZY, mappedBy = "parentid", cascade=CascadeType.ALL)
    private List<Lesson> lessonList = new ArrayList<>();
....setters/getters
}

我从 BD 获取用户并执行 xml:

<user>

        <name>123</name>

        <id>35</id>

</user>

接下来我从这个 xml 中获取新用户并尝试保存在 BD 中。

session.save(user);

如果用户的教训列表为空,Hibernate 会在 BD 中插入新用户。如果列表不为空,Hibernate 将使用更新。为什么?

我使用 JAXB

User.class

     @Entity
        @Table(name = "users")
        public class User {
            @Id
            @GeneratedValue(strategy = GenerationType.AUTO)
            private int id;

            @Column(name = "name", nullable = false)
            private String name;

         @OneToMany(fetch = FetchType.LAZY, mappedBy = "parentid", cascade=CascadeType.ALL)
            private List<Lesson> lessonList = new ArrayList<>();
        ....setters/getters
        }

使用 JAXB 创建 XML

@Transactional
    public User getUserFromXML(int id) {
       StringWriter stringWriter = new StringWriter();
       User copyUser = null;
        User user = UserDAO.getById(id);
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            marshaller.marshal(user, stringWriter);
            StringReader stringReader = new ringReader(stringWriter.toString());
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            copyUser = (User) unmarshaller.unmarshal(stringReader);
            } catch (JAXBException e) {
            e.printStackTrace();
        }
        return copyUser;
}

Controller :

 @Transactional
    void copyUser(HttpServletRequest request, HttpServletResponse response) {

                User copyUser = getUserFromXML(idUser);// it get from Client
                copyUser.setParentid(getLoginUser());
                userDAO.save(copyUser);

        }
    }

最佳答案

您指定自动分配对象 ID。如果您自己提供 ID,Hibernate 会猜测您已经保存了该实体(因此您知道该 id),因此会发布更新。

关于java - Hibernate:更新而不是插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40591566/

相关文章:

java - 创建具有多个图像的 JPanel

java - 使用 hibernate 条件 hibernate 组中的最后一条记录

java - 动态生成的 JavaScript 无法在 Chrome 或 IE 中执行,但可以在 Firefox 中执行

java - 如何使用扫描仪检查Zip文件是否由CSV或其他类型的JAVA文件压缩?

java:从文件开头查找文本文件中单词的字符偏移量,对数偏移量?

spring - 多次引用数据库序列 [hibernate_sequence]

hibernate - java.lang.VerifyError : class org. hibernate.type.WrappedMaterializedBlobType 覆盖 final方法 getReturnedClass.()Ljava/lang/Class;

java - 如何在JSP中显示对象的数据

java - 重新附加分离的实例 : hibernate lock()

java Quartz Scheduler cron 表达式,每过 30 分钟一刻钟