我有实体:
$form->submit($Request->getContent());
我从BD获得用户并执行xml:
@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
}
接下来,我从这个xml中获取新用户并尝试保存在BD中。
<user>
<name>123</name>
<id>35</id>
</user>
如果用户列表课程列表为空,则Hibernate会在BD中插入新用户。如果list不为空,Hibernate使用update。为什么呢?
我使用JAXB
session.save(user);
使用JAXB创建XML
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
}
控制器:
@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;
}
答案 0 :(得分:2)
您正在指定自动分配对象ID。如果您自己提供ID,Hibernate猜测您已经保存了该实体(因此您知道了id),因此发布了更新。