Hibernate annotation 联合主键

Hibernate annotation 联合主键

 

 

package com.hibernate.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Husband implements Serializable {
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 2476364405175138004L;

	
	private int id;
	
	private String name;
	
	private Wife wife;
	
	
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	@OneToOne
	public Wife getWife() {
		return wife;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setWife(Wife wife) {
		this.wife = wife;
	}
	
	
}

 

package com.hibernate.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;

@Entity
@IdClass(WifePK.class)//这种设置主键的方式最简单(在下面联合主键的键上设@Id)
public class Wife implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5270130768836331730L;

	private int id;
	
	private String name;
	
	@Id
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	@Id
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

 

Wife的主键类

package com.hibernate.entity;

import java.io.Serializable;


public class WifePK implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5270130768836331730L;

	
	private int id;
	
	private String name;

	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;
	}
	
	
	
}

 

 

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">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

	<session-factory>
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		<property name="connection.url">
			jdbc:mysql://localhost/test
		</property>
		<property name="connection.username">root</property>
		<property name="connection.password">root</property>
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>

		<!-- JDBC connection pool (use the built-in) -->
		<property name="connection.pool_size">1</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>

		<property name="format_sql">true</property>
		<mapping class="com.hibernate.entity.Husband" />
		<mapping class="com.hibernate.entity.Wife" />
	</session-factory>

</hibernate-configuration>
 

 

然后用junit4调试:

package com.hibernate.test;


import org.hibernate.SessionFactory;

public class ORMappingTest {
	
	private static SessionFactory sessionFactory;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		sessionFactory.close();
	}
	
	@Test
	public void testSchemaExport() {
		new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);
	}

}
 

生成的SQL文日志:

    create table Husband (
        id integer not null auto_increment,
        name varchar(255),
        wife_id integer,
        wife_name varchar(255),
        primary key (id)
    )

    create table Wife (
        id integer not null,
        name varchar(255) not null,
        primary key (id, name)
    )

    alter table Husband 
        add index FKAEEA401B2DB1BA15 (wife_id, wife_name), 
        add constraint FKAEEA401B2DB1BA15 
        foreign key (wife_id, wife_name) 
        references Wife (id, name)
 

 

你可能感兴趣的:(annotation)