|
如果您是在同一个Session中取出数据并想要马上进行更新,则只要先查询并取出对象,透过setXXX()方法设定好新的值,然后呼叫session.flush()即可在同一个Session中更新指定的数据
例如: 复制代码 代码如下: HibernateTest.java import onlyfun.caterpillar.*; import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; import java.util.*; public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); List users = session.find("from User"); User updated = null; for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); if(updated == null) updated = user; System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } updated.setName("justin"); session.flush(); users = session.find("from User"); session.close(); sessionFactory.close(); for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } } }
这个程序会显示数据表中的所有数据,并将数据表中的第一笔数据更新,一个执行的结果如下: log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ caterpillar Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F Hibernate: update USER set name=?, sex=?, age=? where user_id=? Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ justin Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F
如果您是在同一个Session中取出数据并想要马上进行更新,则只要先查询并取出对象,透过setXXX()方法设定好新的值,然后呼叫session.flush()即可在同一个Session中更新指定的数据
如果您开启了一个Session,从数据表中取出数据显示到使用者接口上,之后关闭Session,当使用者在接口上操作完毕并按下储存时,这时您要重新开启一个Session,使用update()方法将对象中的数据更新至对应的数据表中,一个例子如下: 复制代码 代码如下: HibernateTest.java import onlyfun.caterpillar.*; import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; import java.util.*; public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); List users = session.find("from User"); // 关闭这个Session session.close(); User updated = null; for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); if(updated == null) updated = user; System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } // 使用者作一些操作,之后储存 updated.setName("caterpillar"); // 开启一个新的Session session = sessionFactory.openSession(); // 更新数据 session.update(updated); users = session.find("from User"); session.close(); sessionFactory.close(); for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } } } 这个程序执行的结果范例如下,您可以看看实际上执行了哪些SQL: log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ justin Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F Hibernate: update USER set name=?, sex=?, age=? where user_id=? Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ caterpillar Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F
如果您是在同一个Session中取出数据并想要马上进行更新,则只要先查询并取出对象,透过setXXX()方法设定好新的值,然后呼叫session.flush()即可在同一个Session中更新指定的数据
Hibernate提供了一个saveOrUpdate()方法,为数据的储存或更新提供了一个统一的操作接口,藉由定义映像文件时,设定<id>标签的unsaved-value来决定什么是新的值必需,什么是已有的值必须更新: User.hbm.xml 复制代码 代码如下: <id name="id" type="string" unsaved-value="null"> <column name="user_id" sql-type="char(32)" /> <generator class="uuid.hex"/> </id>
unsaved-value 可以设定的值包括: any - 总是储存 none - 总是更新 null - id为null时储存(预设) valid - id为null或是指定值时储存 这样设定之后,您可以使用session.saveOrUpdate(updated);来取代上一个程序的session.update(updated);方法。 如果要删除数据,只要使用delete()方法即可,直接看个例子。 复制代码 代码如下: HibernateTest.java import onlyfun.caterpillar.*; import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; import java.util.*; public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); List users = session.find("from User"); User updated = null; for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); if(updated == null) updated = user; System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } session.delete(updated); users = session.find("from User"); session.close(); sessionFactory.close(); for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } } }
一个执行的结果范例如下: log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ justin Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F Hibernate: delete from USER where user_id=? Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F Hibernate对于数据的更新、删除等动作,是依懒id值来判定,如果您已知id值,则可以使用load()方法来加载资料,例如: User user = (User) session.load(User.class, id); 更多有关于Hibernate资料更新操作的说明,您可以看看参考手册的第九章内容。
如果您是在同一个Session中取出数据并想要马上进行更新,则只要先查询并取出对象,透过setXXX()方法设定好新的值,然后呼叫session.flush()即可在同一个Session中更新指定的数据
例如: 复制代码 代码如下: HibernateTest.java import onlyfun.caterpillar.*; import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; import java.util.*; public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); List users = session.find("from User"); User updated = null; for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); if(updated == null) updated = user; System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } updated.setName("justin"); session.flush(); users = session.find("from User"); session.close(); sessionFactory.close(); for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } } }
这个程序会显示数据表中的所有数据,并将数据表中的第一笔数据更新,一个执行的结果如下: log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ caterpillar Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F Hibernate: update USER set name=?, sex=?, age=? where user_id=? Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ justin Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F
如果您开启了一个Session,从数据表中取出数据显示到使用者接口上,之后关闭Session,当使用者在接口上操作完毕并按下储存时,这时您要重新开启一个Session,使用update()方法将对象中的数据更新至对应的数据表中,一个例子如下: 复制代码 代码如下: HibernateTest.java import onlyfun.caterpillar.*; import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; import java.util.*; public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); List users = session.find("from User"); // 关闭这个Session session.close(); User updated = null; for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); if(updated == null) updated = user; System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } // 使用者作一些操作,之后储存 updated.setName("caterpillar"); // 开启一个新的Session session = sessionFactory.openSession(); // 更新数据 session.update(updated); users = session.find("from User"); session.close(); sessionFactory.close(); for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } } } 这个程序执行的结果范例如下,您可以看看实际上执行了哪些SQL: log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ justin Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F Hibernate: update USER set name=?, sex=?, age=? where user_id=? Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ caterpillar Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F
Hibernate提供了一个saveOrUpdate()方法,为数据的储存或更新提供了一个统一的操作接口,藉由定义映像文件时,设定<id>标签的unsaved-value来决定什么是新的值必需,什么是已有的值必须更新: User.hbm.xml 复制代码 代码如下: <id name="id" type="string" unsaved-value="null"> <column name="user_id" sql-type="char(32)" /> <generator class="uuid.hex"/> </id>
unsaved-value 可以设定的值包括: any - 总是储存 none - 总是更新 null - id为null时储存(预设) valid - id为null或是指定值时储存 这样设定之后,您可以使用session.saveOrUpdate(updated);来取代上一个程序的session.update(updated);方法。 如果要删除数据,只要使用delete()方法即可,直接看个例子。 复制代码 代码如下: HibernateTest.java import onlyfun.caterpillar.*; import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; import java.util.*; public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); List users = session.find("from User"); User updated = null; for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); if(updated == null) updated = user; System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } session.delete(updated); users = session.find("from User"); session.close(); sessionFactory.close(); for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } } }
一个执行的结果范例如下: log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ justin Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F Hibernate: delete from USER where user_id=? Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F Hibernate对于数据的更新、删除等动作,是依懒id值来判定,如果您已知id值,则可以使用load()方法来加载资料,例如: User user = (User) session.load(User.class, id); 更多有关于Hibernate资料更新操作的说明,您可以看看参考手册的第九章内容。 |
|