我有一个人员表和Person.java,它映射到表。我有一个编辑ui来更改Person记录的详细信息。在编辑页面上,用户通常一次更改1或2个字段。我正在使用AJAX发送更新调用,并且只想发送更改的字段。目前正在发送整个对象。
问题在于后端有关如何仅更改已更改字段的数据库。
UI图层创建一个仅包含已更改字段的Person对象,其余字段将未初始化。然后将该对象传递给DAO以进行持久化。 DAO如何知道哪些字段被更改?哪些字段未初始化或故意设置为null以进行更新。目前整个对象都来了,所以我更新了所有列。
答案 0 :(得分:1)
如果您使用ORM(Hibernate)进行持久化,那么您可以使用hibernate.merge进行选择性更新。
JDBC的方法: 将对象保留在会话中,该会话用于使用用户可以编辑的初始值填充UI。 当用户提交更改时,将提交的值与会话中的对象进行比较,并添加到包含字段名称和新值的地图中。使用此映射动态创建更新查询。
答案 1 :(得分:1)
我通常做的是先从数据库中获取所有字段的对象。然后我更新我想要的字段,然后将其发送回DAO。无论如何,DAO都会更新整个对象。以这种方式这样做DAO并不关心哪一个被改变了。 虽然您可能想要添加另一个DAO方法,但有一些特殊情况。