[Hibernate] - many to one
Hibernate的多对一操作:
例子参考引用:
http://www.tutorialspoint.com/hibernate/hibernate_many_to_one_mapping.htm
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://127.0.0.1/testdb</property> <property name="connection.username">root</property> <property name="connection.password"></property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- Enable Hibernate‘s automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping resource="com/my/hbm/User.hbm.xml"/> <mapping resource="com/my/hbm/UserAccount.hbm.xml"/> </session-factory> </hibernate-configuration>
User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.my.bean.User" table="user"> <id name="id" type="int"> <column name="id" /> <generator class="native" /> </id> <property name="name" type="java.lang.String" length="50"> <column name="name" not-null="true" length="50" /> </property> <property name="age" type="int"> <column name="age" /> </property> <property name="password" type="java.lang.String" length="50"> <column name="password" length="50" /> </property> <property name="email" type="java.lang.String" length="100"> <column name="email" length="100" /> </property> <property name="createtime" type="java.util.Date"> <column name="createtime" /> </property> </class> </hibernate-mapping>
UserAccount.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.my.bean.UserAccount" table="user_account"> <id name="id" type="int"> <column name="id" /> <generator class="native" /> </id> <many-to-one name="user" column="user_id" class="com.my.bean.User" not-null="true"></many-to-one> <property name="account" type="java.lang.String" length="50"> <column name="account" not-null="true" length="50" /> </property> </class> </hibernate-mapping>
Java Bean: User.java
package com.my.bean; import java.util.Date; public class User { private int id; private String name; private int age; private String password; private String email; private Date createtime; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } }
Java Bean: UserAccount.java
package com.my.bean; public class UserAccount { private int id; private String account; private User user; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
HibernateUtil.java
package com.my.dao.util; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml Configuration configuration = new Configuration(); return configuration.configure().buildSessionFactory( new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build()); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
测试:
package com.my.init; import java.util.Date; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import com.my.bean.User; import com.my.bean.UserAccount; import com.my.dao.util.HibernateUtil; public class Test { public static void main(String[] args) { Test t = new Test(); // Add new user User user = t .addUser("robin", "abcd1234", "[email protected]", new Date()); System.out.println(user.getId()); // Get user list List<User> users = t.listUser(); for (User item : users) { System.out.println("User name: " + item.getName()); } // Add UserAccount UserAccount ua = t.addUserAccount("robinzhang", user); System.out.println("Add UserAccount: " + ua.getId()); // Update UserAccount UserAccount ua_u = t.updateUserAccount(ua.getId(), "robin_zhang"); System.out.println("Update UserAccount: " + ua_u.getAccount()); // Get User Account List List<UserAccount> uas = t.listUserAccount(); for (UserAccount item : uas) { System.out.println("UserAccount: " + item.getAccount()); System.out.println("UserID: " + item.getUser().getId()); } // Delete UserAccount boolean result = t.deleteUserAccount(1); System.out.println("Delete UserAccount: " + result); // Delete User result = t.deleteUser(user); System.out.println("Delete User: " + result); } /** * List Users */ @SuppressWarnings("unchecked") public List<User> listUser() { Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); List<User> users = null; try { // Select action String hqlSelect = "from User where name like :name"; Query query = session.createQuery(hqlSelect); query.setParameter("name", "%ro%"); users = query.list(); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction() != null) session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } return users; } /** * Add new user * * @param name * User name * @param password * User password * @param email * User email * @param createtime * User create time * @return User object */ public User addUser(String name, String password, String email, Date createtime) { Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); User u = new User(); try { u.setName(name); u.setPassword(password); u.setCreatetime(createtime); u.setEmail(email); u.setAge(18); // Get new user id Integer userid = (Integer) session.save(u); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction() != null) session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } return u; } /** * Get UserAccount Object * * @param account * account name * @param user * User ID * @return UserAccount object */ public UserAccount addUserAccount(String account, User user) { Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); UserAccount ua = null; try { ua = new UserAccount(); ua.setAccount(account); ua.setUser(user); session.save(ua); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction() != null) session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } return ua; } /** * Get User Account List * * @return */ @SuppressWarnings("unchecked") public List<UserAccount> listUserAccount() { Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); List<UserAccount> uas = null; try { String hqlSelect = "from UserAccount where account like :account"; Query query = session.createQuery(hqlSelect); query.setParameter("account", "%ro%"); uas = query.list(); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction() != null) session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } return uas; } /** * Update User Account * * @param id * @param account */ public UserAccount updateUserAccount(Integer id, String account) { Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); UserAccount ua = null; try { ua = (UserAccount) session.get(UserAccount.class, id); ua.setAccount(account); session.update(ua); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction() != null) session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } return ua; } /** * Delete UserAccount * * @param id * @return true/false */ public boolean deleteUserAccount(Integer id) { boolean result = false; Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); try { UserAccount ua = (UserAccount) session.get(UserAccount.class, id); session.delete(ua); session.getTransaction().commit(); result = true; } catch (HibernateException e) { if (session.getTransaction() != null) session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } return result; } /** * Delete User * * @param user * @return */ public boolean deleteUser(User user) { boolean result = false; Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); try { session.delete(user); session.getTransaction().commit(); result = true; } catch (HibernateException e) { if (session.getTransaction() != null) session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } return result; } }
使用Hibernate会自动建库。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。