Hibernate关联关系映射(双向篇)
Hibernate关联关系可分为单向关联和双向关联两大类。单向关联可以分为一对一、一对多、多对一和多对多4种关联方式,而多向关联可以分为一对一、一对多和多对多3种关联方式。 Hibernate连接管理类HibernateUtil.Java public class HibernateUtil { private st
Hibernate关联关系可分为单向关联和双向关联两大类。单向关联可以分为一对一、一对多、多对一和多对多4种关联方式,而多向关联可以分为一对一、一对多和多对多3种关联方式。
Hibernate连接管理类HibernateUtil.Java
<code class=" hljs cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> HibernateUtil { <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> SessionFactory sessionFactory; <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> final ThreadLocal<Session> threadLocal = <span class="hljs-keyword">new</span> ThreadLocal<Session>(); <span class="hljs-keyword">static</span>{ <span class="hljs-keyword">try</span>{ Configuration cfg = <span class="hljs-keyword">new</span> Configuration().configure(); sessionFactory = cfg.buildSessionFactory(); }<span class="hljs-keyword">catch</span>(Throwable ex){ <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> ExceptionInInitializerError(ex); } } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> SessionFactory <span class="hljs-title">getSessionFactory</span>(){ <span class="hljs-keyword">return</span> sessionFactory; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Session <span class="hljs-title">getSession</span>() throws HibernateException{ Session session = (Session)threadLocal.<span class="hljs-keyword">get</span>(); <span class="hljs-keyword">if</span>(session == <span class="hljs-keyword">null</span> || !session.isOpen()){ session = (sessionFactory != <span class="hljs-keyword">null</span>)?sessionFactory.openSession():<span class="hljs-keyword">null</span>; threadLocal.<span class="hljs-keyword">set</span>(session); } <span class="hljs-keyword">return</span> session; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">closeSession</span>() throws HibernateException{ Session session = (Session)threadLocal.<span class="hljs-keyword">get</span>(); threadLocal.<span class="hljs-keyword">set</span>(<span class="hljs-keyword">null</span>); <span class="hljs-keyword">if</span>(session != <span class="hljs-keyword">null</span>){ session.close(); } } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">shutdown</span>(){ getSessionFactory().close(); } }</code>
1.双向的一对一关联
(1)通过主键关联
通过主键关联的双向一对一映射,在需要一方的配置文件中将主键生成策略配置成foreign,即表示需要根据另一方的主键来生成自己的主键,而该实体本身不具有自己的主键生成策略。
示例:
实体类:
User.java
<code class=" hljs cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> User { <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> userid; <span class="hljs-keyword">private</span> String name; <span class="hljs-keyword">private</span> String password; <span class="hljs-keyword">private</span> Address address; <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getUserid</span>() { <span class="hljs-keyword">return</span> userid; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setUserid</span>(<span class="hljs-keyword">int</span> userid) { <span class="hljs-keyword">this</span>.userid = userid; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getName</span>() { <span class="hljs-keyword">return</span> name; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setName</span>(String name) { <span class="hljs-keyword">this</span>.name = name; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getPassword</span>() { <span class="hljs-keyword">return</span> password; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setPassword</span>(String password) { <span class="hljs-keyword">this</span>.password = password; } <span class="hljs-keyword">public</span> Address <span class="hljs-title">getAddress</span>() { <span class="hljs-keyword">return</span> address; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAddress</span>(Address address) { <span class="hljs-keyword">this</span>.address = address; } }</code>
Address.java
<code class=" hljs cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Address { <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> addressid; <span class="hljs-keyword">private</span> String addressinfo; <span class="hljs-keyword">private</span> User user; <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getAddressid</span>() { <span class="hljs-keyword">return</span> addressid; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAddressid</span>(<span class="hljs-keyword">int</span> addressid) { <span class="hljs-keyword">this</span>.addressid = addressid; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getAddressinfo</span>() { <span class="hljs-keyword">return</span> addressinfo; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAddressinfo</span>(String addressinfo) { <span class="hljs-keyword">this</span>.addressinfo = addressinfo; } <span class="hljs-keyword">public</span> User <span class="hljs-title">getUser</span>() { <span class="hljs-keyword">return</span> user; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setUser</span>(User user) { <span class="hljs-keyword">this</span>.user = user; } }</code>
表结构:
User表
Address表
配置文件:
Use.hbm.xml
<code class=" hljs applescript"><hibernate-mapping> <<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"com.entity.User"</span> table=<span class="hljs-string">"user"</span>> <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"userid"</span> type=<span class="hljs-string">"java.lang.Integer"</span> column=<span class="hljs-string">"userid"</span>> <generator <span class="hljs-type">class</span>=<span class="hljs-string">"identity"</span>/> </<span class="hljs-property">id</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"name"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"name"</span>> </<span class="hljs-keyword">property</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"password"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"password"</span>> </<span class="hljs-keyword">property</span>> <one-<span class="hljs-keyword">to</span>-one <span class="hljs-property">name</span>=<span class="hljs-string">"address"</span> <span class="hljs-type">class</span>=<span class="hljs-string">"com.entity.Address"</span> cascade=<span class="hljs-string">"all"</span>/> </<span class="hljs-type">class</span>> </hibernate-mapping></code>
Address.hbm.xml
<code class=" hljs applescript"><hibernate-mapping> <<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"com.entity.Address"</span> table=<span class="hljs-string">"address"<span>> <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"addressid"</span> type=<span class="hljs-string">"java.lang.Integer"</span> column=<span class="hljs-string">"addressid"</span>> <generator <span class="hljs-type">class</span>=<span class="hljs-string">"foreign"</span>> <param <span class="hljs-property">name</span>=<span class="hljs-string">"property"</span>>user</param> </generator> </<span class="hljs-property">id</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"addressinfo"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"addressinfo"</span>> </<span class="hljs-keyword">property</span>> <one-<span class="hljs-keyword">to</span>-one <span class="hljs-property">name</span>=<span class="hljs-string">"user"</span> <span class="hljs-type">class</span>=<span class="hljs-string">"com.entity.User"</span> constrained=<span class="hljs-string">"true"</span>/> </<span class="hljs-type">class</span>> </hibernate-mapping></code>
测试类Test.java
<code class=" hljs cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Test { <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args){ Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); User u = <span class="hljs-keyword">new</span> User(); u.setName(<span class="hljs-string">"sbw"</span>); u.setPassword(<span class="hljs-string">"123"</span>); Address a = <span class="hljs-keyword">new</span> Address(); a.setAddressinfo(<span class="hljs-string">"heu"</span>); a.setUser(u); u.setAddress(a); session.save(u); session.save(a); tx.commit(); HibernateUtil.closeSession(); } }</code>
测试结果:
(2)通过外键关联
通过外键关联的双向一对一映射,外键可以放在任意一方。在存放外键一方的映射文件中,需要添加many-to-one元素,并为该元素添加unique=“true”属性。而另一方的配置文件中要添加one-to-one元素,并使用其name属性来指定关联属性名。此时,存放外键的一方对应的数据表为从表,而另一方对应的数据表变为主表。
实体类与通过主键关联相同。
表结构:
user表
address表
配置文件:
User.hbm.xml
<code class=" hljs applescript"><hibernate-mapping> <<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"com.entity.User"</span> table=<span class="hljs-string">"user"</span>> <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"userid"</span> type=<span class="hljs-string">"java.lang.Integer"</span> column=<span class="hljs-string">"userid"</span>> <generator <span class="hljs-type">class</span>=<span class="hljs-string">"identity"</span>/> </<span class="hljs-property">id</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"name"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"name"</span>> </<span class="hljs-keyword">property</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"password"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"password"</span>> </<span class="hljs-keyword">property</span>> <one-<span class="hljs-keyword">to</span>-one <span class="hljs-property">name</span>=<span class="hljs-string">"address"</span> cascade=<span class="hljs-string">"all"</span>/> </<span class="hljs-type">class</span>> </hibernate-mapping></code>
Address.hbm.xml
<code class=" hljs applescript"><hibernate-mapping> <<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"com.entity.Address"</span> table=<span class="hljs-string">"address"</span>> <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"addressid"</span> type=<span class="hljs-string">"java.lang.Integer"</span> column=<span class="hljs-string">"addressid"</span>> <generator <span class="hljs-type">class</span>=<span class="hljs-string">"identity"</span>> </generator> </<span class="hljs-property">id</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"addressinfo"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"addressinfo"</span>> </<span class="hljs-keyword">property</span>> <many-<span class="hljs-keyword">to</span>-one <span class="hljs-property">name</span>=<span class="hljs-string">"user"</span> <span class="hljs-type">class</span>=<span class="hljs-string">"com.entity.User"</span> unique=<span class="hljs-string">"true"</span>> <column <span class="hljs-property">name</span>=<span class="hljs-string">"userid"</span>/> </many-<span class="hljs-keyword">to</span>-one> </<span class="hljs-type">class</span>> </hibernate-mapping></code>
测试类与通过主键关联一样
测试结果:
2.双向的一对多关联(与双向多对一完全相同)
双向的一对多关联在“多”的一方要增加新属性以引用关联实体,在“一”的一方则增加集合属性,该集合中包含“多”的一方的关联实体。
实体类:
User.java
<code class=" hljs cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> User { <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> userid; <span class="hljs-keyword">private</span> String name; <span class="hljs-keyword">private</span> String password; <span class="hljs-keyword">private</span> Set<Address> address = <span class="hljs-keyword">new</span> HashSet<Address>(); <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getUserid</span>() { <span class="hljs-keyword">return</span> userid; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setUserid</span>(<span class="hljs-keyword">int</span> userid) { <span class="hljs-keyword">this</span>.userid = userid; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getName</span>() { <span class="hljs-keyword">return</span> name; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setName</span>(String name) { <span class="hljs-keyword">this</span>.name = name; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getPassword</span>() { <span class="hljs-keyword">return</span> password; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setPassword</span>(String password) { <span class="hljs-keyword">this</span>.password = password; } <span class="hljs-keyword">public</span> Set<Address> <span class="hljs-title">getAddress</span>() { <span class="hljs-keyword">return</span> address; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAddress</span>(Set<Address> address) { <span class="hljs-keyword">this</span>.address = address; } }</code>
Address.java
<code class=" hljs cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Address { <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> addressid; <span class="hljs-keyword">private</span> String addressinfo; <span class="hljs-keyword">private</span> User user; <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getAddressid</span>() { <span class="hljs-keyword">return</span> addressid; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAddressid</span>(<span class="hljs-keyword">int</span> addressid) { <span class="hljs-keyword">this</span>.addressid = addressid; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getAddressinfo</span>() { <span class="hljs-keyword">return</span> addressinfo; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAddressinfo</span>(String addressinfo) { <span class="hljs-keyword">this</span>.addressinfo = addressinfo; } <span class="hljs-keyword">public</span> User <span class="hljs-title">getUser</span>() { <span class="hljs-keyword">return</span> user; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setUser</span>(User user) { <span class="hljs-keyword">this</span>.user = user; } }</code>
表结构:
user表
address表
配置文件
User.hbm.xml
<code class=" hljs applescript"><hibernate-mapping> <<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"com.entity.User"</span> table=<span class="hljs-string">"user"</span>> <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"userid"</span> type=<span class="hljs-string">"java.lang.Integer"</span> column=<span class="hljs-string">"userid"</span>> <generator <span class="hljs-type">class</span>=<span class="hljs-string">"identity"</span>/> </<span class="hljs-property">id</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"name"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"name"</span>> </<span class="hljs-keyword">property</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"password"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"password"</span>> </<span class="hljs-keyword">property</span>> <<span class="hljs-keyword">set</span> <span class="hljs-property">name</span>=<span class="hljs-string">"address"</span> table=<span class="hljs-string">"address"</span> inverse=<span class="hljs-string">"true"</span> lazy=<span class="hljs-string">"true"</span>> <key> <column <span class="hljs-property">name</span>=<span class="hljs-string">"userid"</span>/> </key> <one-<span class="hljs-keyword">to</span>-many <span class="hljs-type">class</span>=<span class="hljs-string">"com.entity.Address"</span>/> </<span class="hljs-keyword">set</span>> </<span class="hljs-type">class</span>> </hibernate-mapping></code>
Address.hbm.xml
<code class=" hljs applescript"><hibernate-mapping> <<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"com.entity.Address"</span> table=<span class="hljs-string">"address"</span>> <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"addressid"</span> type=<span class="hljs-string">"java.lang.Integer"</span> column=<span class="hljs-string">"addressid"</span>> <generator <span class="hljs-type">class</span>=<span class="hljs-string">"identity"</span>> </generator> </<span class="hljs-property">id</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"addressinfo"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"addressinfo"</span>> </<span class="hljs-keyword">property</span>> <many-<span class="hljs-keyword">to</span>-one <span class="hljs-property">name</span>=<span class="hljs-string">"user"</span> <span class="hljs-type">class</span>=<span class="hljs-string">"com.entity.User"</span> unique=<span class="hljs-string">"true"</span>> <column <span class="hljs-property">name</span>=<span class="hljs-string">"userid"</span>/> </many-<span class="hljs-keyword">to</span>-one> </<span class="hljs-type">class</span>> </hibernate-mapping></code>
测试类Test.java
<code class=" hljs avrasm">public class Test { public static void main(String[] args){ Session session = HibernateUtil<span class="hljs-preprocessor">.getSession</span>()<span class="hljs-comment">;</span> Transaction tx = session<span class="hljs-preprocessor">.beginTransaction</span>()<span class="hljs-comment">;</span> User u = new User()<span class="hljs-comment">;</span> u<span class="hljs-preprocessor">.setName</span>(<span class="hljs-string">"sbw"</span>)<span class="hljs-comment">;</span> u<span class="hljs-preprocessor">.setPassword</span>(<span class="hljs-string">"123"</span>)<span class="hljs-comment">; </span> Address a = new Address()<span class="hljs-comment">;</span> a<span class="hljs-preprocessor">.setAddressinfo</span>(<span class="hljs-string">"heu"</span>)<span class="hljs-comment">;</span> Address a1 = new Address()<span class="hljs-comment">;</span> a<span class="hljs-preprocessor">.setAddressinfo</span>(<span class="hljs-string">"hrb"</span>)<span class="hljs-comment">;</span> a<span class="hljs-preprocessor">.setUser</span>(u)<span class="hljs-comment">;</span> a1<span class="hljs-preprocessor">.setUser</span>(u)<span class="hljs-comment">;</span> u<span class="hljs-preprocessor">.getAddress</span>()<span class="hljs-preprocessor">.add</span>(a)<span class="hljs-comment">;</span> u<span class="hljs-preprocessor">.getAddress</span>()<span class="hljs-preprocessor">.add</span>(a1)<span class="hljs-comment">;</span> session<span class="hljs-preprocessor">.save</span>(a)<span class="hljs-comment">;</span> session<span class="hljs-preprocessor">.save</span>(a1)<span class="hljs-comment">;</span> session<span class="hljs-preprocessor">.save</span>(u)<span class="hljs-comment">;</span> tx<span class="hljs-preprocessor">.commit</span>()<span class="hljs-comment">;</span> HibernateUtil<span class="hljs-preprocessor">.closeSession</span>()<span class="hljs-comment">;</span> } }</code>
测试结果:
3.双向的多对多关联
在双向的多对多关联中,两端都要添加Set集合属性。要实现双向的多对多关联,必须使用中间表来实现两个实体间的关联关系。
示例:
实体类
User.java
<code class=" hljs cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> User { <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> userid; <span class="hljs-keyword">private</span> String name; <span class="hljs-keyword">private</span> String password; <span class="hljs-keyword">private</span> Set<Address> address = <span class="hljs-keyword">new</span> HashSet<Address>(); <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getUserid</span>() { <span class="hljs-keyword">return</span> userid; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setUserid</span>(<span class="hljs-keyword">int</span> userid) { <span class="hljs-keyword">this</span>.userid = userid; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getName</span>() { <span class="hljs-keyword">return</span> name; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setName</span>(String name) { <span class="hljs-keyword">this</span>.name = name; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getPassword</span>() { <span class="hljs-keyword">return</span> password; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setPassword</span>(String password) { <span class="hljs-keyword">this</span>.password = password; } <span class="hljs-keyword">public</span> Set<Address> <span class="hljs-title">getAddress</span>() { <span class="hljs-keyword">return</span> address; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAddress</span>(Set<Address> address) { <span class="hljs-keyword">this</span>.address = address; } }</code>
Address.java
<code class=" hljs cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Address { <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> addressid; <span class="hljs-keyword">private</span> String addressinfo; <span class="hljs-keyword">private</span> Set<User> user = <span class="hljs-keyword">new</span> HashSet<User>(); <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getAddressid</span>() { <span class="hljs-keyword">return</span> addressid; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAddressid</span>(<span class="hljs-keyword">int</span> addressid) { <span class="hljs-keyword">this</span>.addressid = addressid; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getAddressinfo</span>() { <span class="hljs-keyword">return</span> addressinfo; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAddressinfo</span>(String addressinfo) { <span class="hljs-keyword">this</span>.addressinfo = addressinfo; } <span class="hljs-keyword">public</span> Set<User> <span class="hljs-title">getUser</span>() { <span class="hljs-keyword">return</span> user; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setUser</span>(Set<User> user) { <span class="hljs-keyword">this</span>.user = user; } }</code>
表结构:
user表
address表
user_address表
配置文件
User.hbm.xml:
<code class=" hljs applescript"><hibernate-mapping> <<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"com.entity.User"</span> table=<span class="hljs-string">"user"</span>> <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"userid"</span> type=<span class="hljs-string">"java.lang.Integer"</span> column=<span class="hljs-string">"userid"</span>> <generator <span class="hljs-type">class</span>=<span class="hljs-string">"identity"</span>/> </<span class="hljs-property">id</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"name"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"name"</span>> </<span class="hljs-keyword">property</span>> <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"password"</span> type=<span class="hljs-string">"java.lang.String"</span> column=<span class="hljs-string">"password"</span>> </<span class="hljs-keyword">property</span>> <<span class="hljs-keyword">set</span> <span class="hljs-property">name</span>=<span class="hljs-string">"address"</span> table=<span class="hljs-string">"user_address"</span> inverse=<span class="hljs-string">"true"</span>> <key> <column <span class="hljs-property">name</span>=<span class="hljs-string">"userid"</span>/> </key> <many-<span class="hljs-keyword">to</span>-many <span class="hljs-type">class</span>=<span class="hljs-string">"com.entity.Address"</span> column=<span class="hljs-string">"addressid"</span>/> </<span class="hljs-keyword">set</span>> </<span class="hljs-type">class</span>> </hibernate-mapping></code>
Address.hbm.xml
<code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">hibernate-mapping</span>></span> <span class="hljs-tag"><<span class="hljs-title">class</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"com.entity.Address"</span> <span class="hljs-attribute">table</span>=<span class="hljs-value">"address"</span>></span> <span class="hljs-tag"><<span class="hljs-title">id</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"addressid"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.Integer"</span> <span class="hljs-attribute">column</span>=<span class="hljs-value">"addressid"</span>></span> <span class="hljs-tag"><<span class="hljs-title">generator</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"identity"</span>></span> <span class="hljs-tag"></<span class="hljs-title">generator</span>></span> <span class="hljs-tag"></<span class="hljs-title">id</span>></span> <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"addressinfo"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.String"</span> <span class="hljs-attribute">column</span>=<span class="hljs-value">"addressinfo"</span>></span> <span class="hljs-tag"></<span class="hljs-title">property</span>></span> <span class="hljs-tag"><<span class="hljs-title">set</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"user"</span> <span class="hljs-attribute">table</span>=<span class="hljs-value">"user_address"</span>></span> <span class="hljs-tag"><<span class="hljs-title">key</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"addressid"</span>/></span> <span class="hljs-tag"></<span class="hljs-title">key</span>></span> <span class="hljs-tag"><<span class="hljs-title">many-to-many</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.entity.User"</span> <span class="hljs-attribute">column</span>=<span class="hljs-value">"userid"</span>/></span> <span class="hljs-tag"></<span class="hljs-title">set</span>></span> <span class="hljs-tag"></<span class="hljs-title">class</span>></span> <span class="hljs-tag"></<span class="hljs-title">hibernate-mapping</span>></span></code>
测试类Test.java
<code class=" hljs avrasm">public class Test { public static void main(String[] args){ Session session = HibernateUtil<span class="hljs-preprocessor">.getSession</span>()<span class="hljs-comment">;</span> Transaction tx = session<span class="hljs-preprocessor">.beginTransaction</span>()<span class="hljs-comment">;</span> User u = new User()<span class="hljs-comment">;</span> u<span class="hljs-preprocessor">.setName</span>(<span class="hljs-string">"sbw"</span>)<span class="hljs-comment">;</span> u<span class="hljs-preprocessor">.setPassword</span>(<span class="hljs-string">"123"</span>)<span class="hljs-comment">; </span> User u1 = new User()<span class="hljs-comment">;</span> u1<span class="hljs-preprocessor">.setName</span>(<span class="hljs-string">"gaoya"</span>)<span class="hljs-comment">;</span> u1<span class="hljs-preprocessor">.setPassword</span>(<span class="hljs-string">"456"</span>)<span class="hljs-comment">;</span> Address a = new Address()<span class="hljs-comment">;</span> a<span class="hljs-preprocessor">.setAddressinfo</span>(<span class="hljs-string">"heu"</span>)<span class="hljs-comment">;</span> Address a1 = new Address()<span class="hljs-comment">;</span> a1<span class="hljs-preprocessor">.setAddressinfo</span>(<span class="hljs-string">"hrb"</span>)<span class="hljs-comment">;</span> a<span class="hljs-preprocessor">.getUser</span>()<span class="hljs-preprocessor">.add</span>(u)<span class="hljs-comment">;</span> a<span class="hljs-preprocessor">.getUser</span>()<span class="hljs-preprocessor">.add</span>(u1)<span class="hljs-comment">;</span> a1<span class="hljs-preprocessor">.getUser</span>()<span class="hljs-preprocessor">.add</span>(u)<span class="hljs-comment">;</span> a1<span class="hljs-preprocessor">.getUser</span>()<span class="hljs-preprocessor">.add</span>(u1)<span class="hljs-comment">;</span> u<span class="hljs-preprocessor">.getAddress</span>()<span class="hljs-preprocessor">.add</span>(a)<span class="hljs-comment">;</span> u<span class="hljs-preprocessor">.getAddress</span>()<span class="hljs-preprocessor">.add</span>(a1)<span class="hljs-comment">;</span> u1<span class="hljs-preprocessor">.getAddress</span>()<span class="hljs-preprocessor">.add</span>(a)<span class="hljs-comment">;</span> u1<span class="hljs-preprocessor">.getAddress</span>()<span class="hljs-preprocessor">.add</span>(a1)<span class="hljs-comment">;</span> session<span class="hljs-preprocessor">.save</span>(a)<span class="hljs-comment">;</span> session<span class="hljs-preprocessor">.save</span>(a1)<span class="hljs-comment">;</span> session<span class="hljs-preprocessor">.save</span>(u)<span class="hljs-comment">;</span> session<span class="hljs-preprocessor">.save</span>(u1)<span class="hljs-comment">;</span> tx<span class="hljs-preprocessor">.commit</span>()<span class="hljs-comment">;</span> HibernateUtil<span class="hljs-preprocessor">.closeSession</span>()<span class="hljs-comment">;</span> } }</code>
测试结果:

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Intégration d'Hibernate dans le projet SpringBoot Préface Hibernate est un framework ORM (Object Relational Mapping) populaire qui peut mapper des objets Java à des tables de base de données pour faciliter les opérations de persistance. Dans le projet SpringBoot, l'intégration d'Hibernate peut nous aider à effectuer plus facilement des opérations de base de données. Cet article présentera comment intégrer Hibernate dans le projet SpringBoot et fournira des exemples correspondants. 1.Introduire les dépendancesIntroduire les dépendances suivantes dans le fichier pom.xml : org.springframework.bootspring-boot-starter-data-jpam

Qu’est-ce que JPA ? En quoi est-ce différent de JDBC ? JPA (JavaPersistence API) est une interface standard pour le mappage objet-relationnel (ORM), qui permet aux développeurs Java d'utiliser des objets Java familiers pour faire fonctionner des bases de données sans écrire de requêtes SQL directement sur la base de données. JDBC (JavaDatabaseConnectivity) est l'API standard de Java pour la connexion aux bases de données. Elle oblige les développeurs à utiliser des instructions SQL pour faire fonctionner la base de données. JPA encapsule JDBC, fournit une API plus pratique et de niveau supérieur pour le mappage objet-relationnel et simplifie les opérations d'accès aux données. Dans JPA, qu’est-ce qu’une entité ? entité

Comment associer automatiquement les clés étrangères MySQL et les clés primaires ? Dans la base de données MySQL, les clés étrangères et les clés primaires sont des concepts très importants. Elles peuvent nous aider à établir des relations entre différentes tables et à garantir l'intégrité et la cohérence des données. Dans les processus applicatifs réels, il est souvent nécessaire d’associer automatiquement les clés étrangères aux clés primaires correspondantes pour éviter les incohérences des données. Ce qui suit présentera comment implémenter cette fonction à travers des exemples de code spécifiques. Tout d’abord, nous devons créer deux tables, l’une comme table maître et l’autre comme table esclave. Créer dans la table principale

Java est un langage de programmation orienté objet largement utilisé dans le domaine du développement de logiciels. Hibernate est un framework de persistance Java populaire qui fournit un moyen simple et efficace de gérer la persistance des objets Java. Cependant, des erreurs Hibernate sont souvent rencontrées au cours du processus de développement, et ces erreurs peuvent entraîner une fin anormale du programme ou devenir instable. Comment gérer et éviter les erreurs Hibernate est devenu une compétence que les développeurs Java doivent maîtriser. Cet article présentera quelques Hib courants

Le système Android et le noyau Linux sont deux entités étroitement liées, et la relation entre eux est étroite et complexe. Dans le système Android, le noyau Linux joue un rôle important, fournissant les pilotes matériels sous-jacents et la prise en charge des appels système pour le système Android. Cet article explorera la relation entre le système Android et le noyau Linux, la manière dont ils interagissent et fonctionnent ensemble, et fournira quelques exemples de code spécifiques. Android est un système d'exploitation mobile développé sur la base du noyau Linux et est principalement utilisé pour les appareils mobiles tels que les smartphones et les tablettes. L

Les différences entre hibernate et mybatis : 1. Méthode de mise en œuvre ; 2. Performances 3. Comparaison de la gestion des objets ; Introduction détaillée : 1. Méthode d'implémentation, Hibernate est une solution complète de mappage objet/relationnel qui mappe les objets aux tables de base de données, tandis que MyBatis oblige les développeurs à écrire manuellement des instructions SQL et ResultMap 2. Performances, Hibernate est possible en termes de vitesse de développement Plus rapide que ; MyBatis car Hibernate simplifie la couche DAO et ainsi de suite.

Recherche sur la relation entre le système Huawei Hongmeng et Android Avec le développement continu de la technologie, les smartphones sont devenus un élément indispensable de la vie des gens. En tant que l'un des principaux fabricants de téléphones mobiles au monde, Huawei innove constamment et s'engage à fournir de meilleurs systèmes d'exploitation mobiles et de meilleures expériences utilisateur. Ces dernières années, avec la suppression de Huawei par les États-Unis, Huawei a commencé à accélérer le développement de son propre système d'exploitation, et HarmonyOS a vu le jour. Dans ce contexte, les gens ont commencé à prêter attention à la relation entre le système Hongmeng et Android. Premièrement, nous devons comprendre

Hibernate un-à-plusieurs et plusieurs-à-plusieurs d'Hibernate est un excellent framework ORM qui simplifie l'accès aux données entre les applications Java et les bases de données relationnelles. Dans Hibernate, nous pouvons utiliser des relations un-à-plusieurs et plusieurs-à-plusieurs pour gérer des modèles de données complexes. Le un-à-plusieurs d'Hibernate Dans Hibernate, une relation un-à-plusieurs signifie qu'une classe d'entité correspond à plusieurs autres classes d'entités. Par exemple, une commande peut correspondre à plusieurs articles de commande (OrderItem), et un utilisateur (User) peut correspondre à plusieurs commandes (Order). Pour implémenter une relation un-à-plusieurs dans Hibernate, vous devez définir un attribut de collection dans la classe d'entité à stocker
