簡體   English   中英

休眠:更新而不是插入

[英]Hibernate: update instead insert

我有實體:

@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使用update。 為什么?

我用的是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;
}

控制器:

 @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),因此發出了更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM