Hibernate 一对一映射示例


在这个例子中,我们将看到如何使用注解来实现一对一的关系。

以国家和首都为例。一个国家有一个首都。下面是它们之间的关系图。

img

现在要在数据库中创建上述表,您需要创建两个 java 文件,即 Country.java 和 Capital.java。

1.Country.java

Country 类将用于在数据库中创建 COUNTRY 表。 在 src->org.arpit.javapostsforlearning 中创建 C ountry.java

package org.arpit.javapostsforlearning;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="COUNTRY")
public class Country {

    @Id
    @Column(name="Country_Name")
    String countryName ;

    @OneToOne
        @JoinColumn(name="Capital_Name")
    Capital capital;

    @Column(name="Country_Population")
    long countryPopulation;

    public Country()
    {

    }

    public Country(String countryName, long countryPopulation) {
  this.countryName = countryName;
  this.countryPopulation = countryPopulation;
}

    public long getCountryPopulation() {
  return countryPopulation;
}

    public void setCountryPopulation(long countryPopulation) {
  this.countryPopulation = countryPopulation;
}

    public String getCountryName() {
        return countryName;
        }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }

    public Capital getCapital() {
  return capital;
}

    public void setCapital(Capital capital) {
  this.capital = capital;
}
}

@OneToOne 注释用于在 Country 和 Capital 实体之间创建一对一的关系。 @joinColumn 用于指定用于加入实体关联的映射列。

2.Capital.java

Capital 类将用于在数据库中创建 CAPITAL 表。在 src->org.arpit.javapostsforlearning 中 创建 Capital.java 。

package org.arpit.javapostsforlearning;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="CAPITAL")
public class Capital {

@Id
@Column(name="Capital_Name")
String capitalName;

@Column(name="Capital_Population")
long capitalPopulation;

public Capital()
{

}
public Capital(String capitalName, long capitalPopulation) {
  super();
  this.capitalName = capitalName;
  this.capitalPopulation = capitalPopulation;
}

public String getCapitalName() {
  return capitalName;
}

public void setCapitalName(String capitalName) {
  this.capitalName = capitalName;
}
public long getCapitalPopulation() {
  return capitalPopulation;
}

public void setCapitalPopulation(long capitalPopulation) {
  this.capitalPopulation = capitalPopulation;
}

}

3.Hiberante.cfg.xml:

在src文件夹中创建一个名为“hibernate.cfg.xml”的 文件。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="connection.url">jdbc:sqlserver://localhost:1433;database=UserInfo</property>
        <property name="connection.username">sa</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.SQLServer2005Dialect</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.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">create</property>

  <mapping class="org.arpit.javapostsforlearning.Country"></mapping>
  <mapping class="org.arpit.javapostsforlearning.Capital"></mapping>

    </session-factory>

</hibernate-configuration>

4.Main Class:

package org.arpit.javapostsforlearning;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateMain {

public static void main(String[] args) {

Configuration configuration=new Configuration();
configuration.configure();
ServiceRegistry sr= new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
SessionFactory sf=configuration.buildSessionFactory(sr);
Session ss=sf.openSession();

Country countryIndia=new Country("India",50000000);
Capital capitalDelhi=new Capital("Delhi",4000000);
countryIndia.setCapital(capitalDelhi);
Country countryFrance=new Country("France",20000000);
Capital capitalParis=new Capital("Paris",1000000);
countryFrance.setCapital(capitalParis);
ss.beginTransaction();
ss.save(countryIndia);
ss.save(capitalDelhi);
ss.save(countryFrance);
ss.save(capitalParis);
ss.getTransaction().commit();
ss.close();

}

}

项目结构:

img

5.SQL output:

数据库中的 COUNTRY 表

img

数据库中的 CAPITAL 表

img

源代码:

<b>Source:</b><a href="https://dl.dropbox.com/s/kjzklx8xldmdk4t/OneToOneMappingExample.zip" target="_blank">Download without jars files</a>
<b>Source + lib</b>: <a href="https://dl.dropbox.com/s/7khkn0wixvkzr84/OneToOneMappingExampleWithJars.zip" target="_blank">Download with jar files</a>


原文链接:https://codingdict.com/