hibernate 映射继承关系
实现方式一般有三种: 1. 继承关系树每个具体类对应一张表(不介绍) 2. 继承关系树的根类对应一张表 3. 继承关系树的每个类对应一张表 先介绍关系: DayEmployee和MonthEmploy是Employee的子类,并且Company和Employee是一对多关系: 具体代码如下: Compan
实现方式一般有三种:
1. 继承关系树每个具体类对应一张表(不介绍)
2. 继承关系树的根类对应一张表
3. 继承关系树的每个类对应一张表
先介绍关系:
DayEmployee和MonthEmploy是Employee的子类,并且Company和Employee是一对多关系:
具体代码如下:
Company.java
<code class=" hljs java"><span class="hljs-keyword">import</span> java.util.HashSet; <span class="hljs-keyword">import</span> java.util.Set; <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Company</span> {</span> <span class="hljs-keyword">private</span> Integer id; <span class="hljs-keyword">private</span> String name; <span class="hljs-keyword">private</span> Set<Employee> employees = <span class="hljs-keyword">new</span> HashSet<Employee>(); <span class="hljs-keyword">public</span> <span class="hljs-title">Company</span>() { <span class="hljs-keyword">super</span>(); } <span class="hljs-keyword">public</span> <span class="hljs-title">Company</span>(String name) { <span class="hljs-keyword">super</span>(); <span class="hljs-keyword">this</span>.name = name; } <span class="hljs-keyword">public</span> Integer <span class="hljs-title">getId</span>() { <span class="hljs-keyword">return</span> id; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setId</span>(Integer id) { <span class="hljs-keyword">this</span>.id = id; } <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> Set<Employee> <span class="hljs-title">getEmployees</span>() { <span class="hljs-keyword">return</span> employees; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setEmployees</span>(Set<Employee> employees) { <span class="hljs-keyword">this</span>.employees = employees; } }</code>
Employee.java
<code class=" hljs cs"> <span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Employee { <span class="hljs-keyword">private</span> Integer id; <span class="hljs-keyword">private</span> String name; <span class="hljs-keyword">private</span> Integer age; <span class="hljs-keyword">private</span> Company company; <span class="hljs-keyword">public</span> Company <span class="hljs-title">getCompany</span>() { <span class="hljs-keyword">return</span> company; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setCompany</span>(Company company) { <span class="hljs-keyword">this</span>.company = company; } <span class="hljs-keyword">public</span> Integer <span class="hljs-title">getId</span>() { <span class="hljs-keyword">return</span> id; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setId</span>(Integer id) { <span class="hljs-keyword">this</span>.id = id; } <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> Integer <span class="hljs-title">getAge</span>() { <span class="hljs-keyword">return</span> age; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setAge</span>(Integer age) { <span class="hljs-keyword">this</span>.age = age; } } </code>
DayEmployee.java
<code class=" hljs java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DayEmployee</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Employee</span>{</span> <span class="hljs-keyword">private</span> Double dayMoney; <span class="hljs-keyword">public</span> Double <span class="hljs-title">getDayMoney</span>() { <span class="hljs-keyword">return</span> dayMoney; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setDayMoney</span>(Double dayMoney) { <span class="hljs-keyword">this</span>.dayMoney = dayMoney; } } </code>
MonthEmploy.java
<code class=" hljs java"> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MonthEmploy</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Employee</span>{</span> <span class="hljs-keyword">private</span> Double monthMoney; <span class="hljs-keyword">public</span> Double <span class="hljs-title">getMonthMoney</span>() { <span class="hljs-keyword">return</span> monthMoney; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setMonthMoney</span>(Double monthMoney) { <span class="hljs-keyword">this</span>.monthMoney = monthMoney; } } </code>
Company.hbm.xml
<code class=" hljs xml"><span class="hljs-pi"><?xml version="1.0"?></span> <span class="hljs-doctype"><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"></span> <span class="hljs-tag"><<span class="hljs-title">hibernate-mapping</span> <span class="hljs-attribute">package</span>=<span class="hljs-value">"com.dongecs.test1.pojo"</span>></span> <span class="hljs-tag"><<span class="hljs-title">class</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"Company"</span> <span class="hljs-attribute">table</span>=<span class="hljs-value">"COMPANY"</span>></span> <span class="hljs-tag"><<span class="hljs-title">id</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"id"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.Integer"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"ID"</span> /></span> <span class="hljs-tag"><<span class="hljs-title">generator</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"native"</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">"name"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.String"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"NAME"</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">"employees"</span> <span class="hljs-attribute">table</span>=<span class="hljs-value">"EMPLOYEE"</span> <span class="hljs-attribute">inverse</span>=<span class="hljs-value">"true"</span> <span class="hljs-attribute">lazy</span>=<span class="hljs-value">"true"</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">"COMPANY"</span> /></span> <span class="hljs-tag"></<span class="hljs-title">key</span>></span> <span class="hljs-tag"><<span class="hljs-title">one-to-many</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"Employee"</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>
继承关系树的根类对应一张表对应的Employee.hbm.xml的写法
Employee.hbm.xml
<code class=" hljs xml"><span class="hljs-pi"><?xml version="1.0"?></span> <span class="hljs-doctype"><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"></span> <span class="hljs-tag"><<span class="hljs-title">hibernate-mapping</span> <span class="hljs-attribute">package</span>=<span class="hljs-value">"com.dongecs.test1.pojo"</span>></span> <span class="hljs-comment"><!-- 利用discriminator-value默认 empType 的值为emp --></span> <span class="hljs-tag"><<span class="hljs-title">class</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"Employee"</span> <span class="hljs-attribute">table</span>=<span class="hljs-value">"EMPLOYEE"</span> <span class="hljs-attribute">discriminator-value</span>=<span class="hljs-value">"emp"</span>></span> <span class="hljs-tag"><<span class="hljs-title">id</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"id"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.Integer"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"ID"</span> /></span> <span class="hljs-tag"><<span class="hljs-title">generator</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"native"</span> /></span> <span class="hljs-tag"></<span class="hljs-title">id</span>></span> <span class="hljs-comment"><!--用于识别此类的类别 --></span> <span class="hljs-tag"><<span class="hljs-title">discriminator</span> <span class="hljs-attribute">column</span>=<span class="hljs-value">"empType"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"string"</span>/></span> <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"name"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.String"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"NAME"</span> /></span> <span class="hljs-tag"></<span class="hljs-title">property</span>></span> <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"age"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.Integer"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"AGE"</span> /></span> <span class="hljs-tag"></<span class="hljs-title">property</span>></span> <span class="hljs-tag"><<span class="hljs-title">many-to-one</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"company"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"Company"</span> <span class="hljs-attribute">fetch</span>=<span class="hljs-value">"join"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"COMPANY"</span> /></span> <span class="hljs-tag"></<span class="hljs-title">many-to-one</span>></span> <span class="hljs-comment"><!-- 若为DayEmployee,那么将empType的值设为DE --></span> <span class="hljs-tag"><<span class="hljs-title">subclass</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"DayEmployee"</span> <span class="hljs-attribute">discriminator-value</span>=<span class="hljs-value">"DE"</span>></span> <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"dayMoney"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"double"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span> <span class="hljs-tag"></<span class="hljs-title">subclass</span>></span> <span class="hljs-comment"><!-- 若为MonthEmploy,那么将empType的值设为ME --></span> <span class="hljs-tag"><<span class="hljs-title">subclass</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"MonthEmploy"</span> <span class="hljs-attribute">discriminator-value</span>=<span class="hljs-value">"ME"</span>></span> <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"monthMoney"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"double"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span> <span class="hljs-tag"></<span class="hljs-title">subclass</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>
利用上述代码作如下测试:
<code class=" hljs java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">EmployeeTest</span> {</span> SessionFactory sessionFactory = <span class="hljs-keyword">null</span>; Session session = <span class="hljs-keyword">null</span>; Transaction transaction = <span class="hljs-keyword">null</span>; <span class="hljs-annotation">@Before</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">init</span>() { Configuration configuration = <span class="hljs-keyword">new</span> Configuration().configure(); ServiceRegistry serviceRegistry = <span class="hljs-keyword">new</span> ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); session = sessionFactory.openSession(); transaction = session.beginTransaction(); } <span class="hljs-annotation">@After</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">after</span>() { transaction.commit(); session.close(); sessionFactory.close(); } <span class="hljs-annotation">@Test</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testEmployee</span>() { Company company = <span class="hljs-keyword">new</span> Company(<span class="hljs-string">"com1"</span>); DayEmployee d1 = <span class="hljs-keyword">new</span> DayEmployee(); d1.setAge(<span class="hljs-number">22</span>); d1.setDayMoney(<span class="hljs-number">50.0</span>); d1.setName(<span class="hljs-string">"d1"</span>); MonthEmploy d2 = <span class="hljs-keyword">new</span> MonthEmploy(); d2.setAge(<span class="hljs-number">30</span>); d2.setMonthMoney(<span class="hljs-number">79.0</span>); d2.setName(<span class="hljs-string">"d2"</span>); Employee employee = <span class="hljs-keyword">new</span> Employee(); employee.setAge(<span class="hljs-number">90</span>); employee.setName(<span class="hljs-string">"employee"</span>); d1.setCompany(company); d2.setCompany(company); employee.setCompany(company); <span class="hljs-comment">//inverse = true 时可以关联, 当相对多出3条update,因此建议使用多的一端关联</span> <span class="hljs-comment">// company.getEmployees().add(employee);</span> <span class="hljs-comment">// company.getEmployees().add(d1);</span> <span class="hljs-comment">// company.getEmployees().add(d2);</span> <span class="hljs-comment">//把一的一段放到最前保存,可以减小3条更新操作</span> session.save(company); session.save(employee); session.save(d2); session.save(d1); } }</code>
会得出如下结果:
继承关系树的每个类对应一张表Employee.hbm.xml的写法
<code class=" hljs xml"><span class="hljs-pi"><?xml version="1.0"?></span> <span class="hljs-doctype"><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"></span> <span class="hljs-tag"><<span class="hljs-title">hibernate-mapping</span> <span class="hljs-attribute">package</span>=<span class="hljs-value">"com.dongecs.test1.pojo"</span>></span> <span class="hljs-tag"><<span class="hljs-title">class</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"Employee"</span> <span class="hljs-attribute">table</span>=<span class="hljs-value">"EMPLOYEE"</span>></span> <span class="hljs-tag"><<span class="hljs-title">id</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"id"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.Integer"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"ID"</span> /></span> <span class="hljs-tag"><<span class="hljs-title">generator</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"native"</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">"name"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.String"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"NAME"</span> /></span> <span class="hljs-tag"></<span class="hljs-title">property</span>></span> <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"age"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"java.lang.Integer"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"AGE"</span> /></span> <span class="hljs-tag"></<span class="hljs-title">property</span>></span> <span class="hljs-tag"><<span class="hljs-title">many-to-one</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"company"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"Company"</span> <span class="hljs-attribute">fetch</span>=<span class="hljs-value">"join"</span>></span> <span class="hljs-tag"><<span class="hljs-title">column</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"COMPANY"</span> /></span> <span class="hljs-tag"></<span class="hljs-title">many-to-one</span>></span> <span class="hljs-comment"><!-- 利用joined-subclass表签外键关联MonthEmploy --></span> <span class="hljs-tag"><<span class="hljs-title">joined-subclass</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"MonthEmploy"</span> <span class="hljs-attribute">table</span>=<span class="hljs-value">"MONEMPLOY"</span>></span> <span class="hljs-tag"><<span class="hljs-title">key</span> <span class="hljs-attribute">column</span>=<span class="hljs-value">"EMPLOYEE_ID"</span>></span><span class="hljs-tag"></<span class="hljs-title">key</span>></span> <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"monthMoney"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"double"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span> <span class="hljs-tag"></<span class="hljs-title">joined-subclass</span>></span> <span class="hljs-tag"><<span class="hljs-title">joined-subclass</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"DayEmployee"</span> <span class="hljs-attribute">table</span>=<span class="hljs-value">"DAYEMPLOY"</span>></span> <span class="hljs-tag"><<span class="hljs-title">key</span> <span class="hljs-attribute">column</span>=<span class="hljs-value">"EMPLOYEE_ID"</span>></span><span class="hljs-tag"></<span class="hljs-title">key</span>></span> <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"dayMoney"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"double"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span> <span class="hljs-tag"></<span class="hljs-title">joined-subclass</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>
测试代码:
<code class=" hljs java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">EmployeeTest</span> {</span> SessionFactory sessionFactory = <span class="hljs-keyword">null</span>; Session session = <span class="hljs-keyword">null</span>; Transaction transaction = <span class="hljs-keyword">null</span>; <span class="hljs-annotation">@Before</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">init</span>() { Configuration configuration = <span class="hljs-keyword">new</span> Configuration().configure(); ServiceRegistry serviceRegistry = <span class="hljs-keyword">new</span> ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); session = sessionFactory.openSession(); transaction = session.beginTransaction(); } <span class="hljs-annotation">@After</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">after</span>() { transaction.commit(); session.close(); sessionFactory.close(); } <span class="hljs-annotation">@Test</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testEmployee</span>() { Company company = <span class="hljs-keyword">new</span> Company(<span class="hljs-string">"com1"</span>); DayEmployee d1 = <span class="hljs-keyword">new</span> DayEmployee(); d1.setAge(<span class="hljs-number">22</span>); d1.setDayMoney(<span class="hljs-number">50.0</span>); d1.setName(<span class="hljs-string">"d1"</span>); MonthEmploy d2 = <span class="hljs-keyword">new</span> MonthEmploy(); d2.setAge(<span class="hljs-number">30</span>); d2.setMonthMoney(<span class="hljs-number">79.0</span>); d2.setName(<span class="hljs-string">"d2"</span>); Employee employee = <span class="hljs-keyword">new</span> Employee(); employee.setAge(<span class="hljs-number">90</span>); employee.setName(<span class="hljs-string">"employee"</span>); d1.setCompany(company); d2.setCompany(company); employee.setCompany(company); <span class="hljs-comment">//inverse = true 时可以关联, 当相对多出3条update,因此建议使用多的一端关联</span> <span class="hljs-comment">// company.getEmployees().add(employee);</span> <span class="hljs-comment">// company.getEmployees().add(d1);</span> <span class="hljs-comment">// company.getEmployees().add(d2);</span> <span class="hljs-comment">//把一的一段放到最前保存,可以减小3条更新操作</span> session.save(company); session.save(employee); session.save(d2); session.save(d1); } <span class="hljs-annotation">@Test</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">findFromEmployeeTable</span>(){ String hql = <span class="hljs-string">"from Employee"</span>; <span class="hljs-comment">//通过左外链接找</span> List<Employee> list = session.createQuery(hql).list(); <span class="hljs-keyword">for</span> (Employee emp : list){ <span class="hljs-keyword">if</span> (emp <span class="hljs-keyword">instanceof</span> DayEmployee){ System.out.println(<span class="hljs-string">"day"</span>); } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (emp <span class="hljs-keyword">instanceof</span> MonthEmploy){ System.out.println(<span class="hljs-string">"mon"</span>); } <span class="hljs-keyword">else</span> { System.out.println(<span class="hljs-string">"emp"</span>); } } } <span class="hljs-annotation">@Test</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">findFromDayEmployeeTable</span>(){ String hql = <span class="hljs-string">"from DayEmployee"</span>; <span class="hljs-comment">//通过内连接找</span> List<Employee> list = session.createQuery(hql).list(); System.out.println(list.size()); } } </code>
得出如下结果:
结论:
1.使用根类对应一张表
好处:只需创建一张表,不用外键关联
缺点:如果子类属性多,会导致另一子类有过多的空值,而且不能设置一些字段的not null约束,因此不能保证数据库的完整性
2.每个类对应一张表(外键关联)
好处:如果某个类的属性发生变化,只需修改和这个类对应的表
缺点:利用外键关联查询
ref:
孙卫琴.精通Hibernate:Java对象持久化技术详解

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか?ソーシャルメディアの台頭により、WeChatは人々の日常生活に欠かせないコミュニケーションツールの1つになりました。ただし、多くの人は、同じ携帯電話で同時に複数の WeChat アカウントにログインするという問題に遭遇する可能性があります。 Huawei 社の携帯電話ユーザーにとって、WeChat の二重ログインを実現することは難しくありませんが、この記事では Huawei 社の携帯電話で WeChat の二重ログインを実現する方法を紹介します。まず第一に、ファーウェイの携帯電話に付属するEMUIシステムは、デュアルアプリケーションを開くという非常に便利な機能を提供します。アプリケーションのデュアルオープン機能により、ユーザーは同時に

関数の継承では、「基底クラス ポインター」と「派生クラス ポインター」を使用して継承メカニズムを理解します。基底クラス ポインターが派生クラス オブジェクトを指す場合、上方変換が実行され、基底クラスのメンバーのみにアクセスされます。派生クラス ポインターが基本クラス オブジェクトを指す場合、下向きキャストが実行される (安全ではない) ため、注意して使用する必要があります。

プログラミング言語 PHP は、さまざまなプログラミング ロジックやアルゴリズムをサポートできる、Web 開発用の強力なツールです。その中でも、フィボナッチ数列の実装は、一般的で古典的なプログラミングの問題です。この記事では、PHP プログラミング言語を使用してフィボナッチ数列を実装する方法を、具体的なコード例を添付して紹介します。フィボナッチ数列は、次のように定義される数学的数列です。数列の最初と 2 番目の要素は 1 で、3 番目の要素以降、各要素の値は前の 2 つの要素の合計に等しくなります。シーケンスの最初のいくつかの要素

Huawei 携帯電話に WeChat クローン機能を実装する方法 ソーシャル ソフトウェアの人気と人々のプライバシーとセキュリティの重視に伴い、WeChat クローン機能は徐々に人々の注目を集めるようになりました。 WeChat クローン機能を使用すると、ユーザーは同じ携帯電話で複数の WeChat アカウントに同時にログインできるため、管理と使用が容易になります。 Huawei携帯電話にWeChatクローン機能を実装するのは難しくなく、次の手順に従うだけです。ステップ 1: 携帯電話システムのバージョンと WeChat のバージョンが要件を満たしていることを確認する まず、Huawei 携帯電話システムのバージョンと WeChat アプリが最新バージョンに更新されていることを確認します。

今日のソフトウェア開発分野では、効率的で簡潔かつ同時実行性の高いプログラミング言語として、Golang (Go 言語) が開発者にますます好まれています。豊富な標準ライブラリと効率的な同時実行機能により、ゲーム開発の分野で注目を集めています。この記事では、ゲーム開発に Golang を使用する方法を検討し、具体的なコード例を通じてその強力な可能性を示します。 1. ゲーム開発における Golang の利点 Golang は静的型付け言語として、大規模なゲーム システムの構築に使用されます。

PHP ゲーム要件実装ガイド インターネットの普及と発展に伴い、Web ゲーム市場の人気はますます高まっています。多くの開発者は、PHP 言語を使用して独自の Web ゲームを開発することを望んでおり、ゲーム要件の実装は重要なステップです。この記事では、PHP 言語を使用して一般的なゲーム要件を実装する方法を紹介し、具体的なコード例を示します。 1. ゲームキャラクターの作成 Web ゲームにおいて、ゲームキャラクターは非常に重要な要素です。ゲームキャラクターの名前、レベル、経験値などの属性を定義し、これらを操作するメソッドを提供する必要があります。

継承とポリモーフィズムはクラスの結合に影響します。派生クラスは基本クラスに依存するため、継承により結合が増加します。ポリモーフィズムにより、オブジェクトは仮想関数と基本クラス ポインターを通じて一貫した方法でメッセージに応答できるため、結合が軽減されます。ベスト プラクティスには、継承を控えめに使用すること、パブリック インターフェイスを定義すること、基本クラスへのデータ メンバーの追加を回避すること、依存関係の注入を通じてクラスを分離することが含まれます。ポリモーフィズムと依存性注入を使用して銀行口座アプリケーションの結合を軽減する方法を示す実践的な例。

継承エラーのデバッグのヒント: 正しい継承関係を確認します。デバッガーを使用してコードをステップ実行し、変数値を調べます。仮想修飾子を正しく使用してください。隠れた相続によって引き起こされる相続ダイアモンド問題を調べてください。抽象クラスに実装されていない純粋仮想関数がないか確認します。
