Hibernate――ORMapping(三)

2015-07-24 11:34:32 · 作者: · 浏览: 36
age) { this.age = age; } }

?

?

Wife类的联合主键类WifePK.java

package com.bjsxt.hibernate;



import java.io.Serializable;







public class WifePK implements Serializable {

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;

}



}





Huaband.java

package com.zgy.hibernate.model;



import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinColumns;

import javax.persistence.OneToOne;



@Entity

public class Husband {

private int id;

private String name;

private Wife wife;

@Id

@GeneratedValue

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;

}

@OneToOne

@JoinColumns(

{

@JoinColumn(name="wifeId",referencedColumnName="id"),

@JoinColumn(name="wifeName",referencedColumnName="name")

}

)

public Wife getWife() {

return wife;

}

public void setWife(Wife wife) {

this.wife = wife;

}



}

?

观察结果:

1.在husband.java中,只使用@OneToOne,则会在husband表中自动生成wife_id ,wife_name两个字段。show create table husband;

CREATE TABLE `husband` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`wife_id` int(11) DEFAULT NULL,

`wife_name` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `FK_4565w2c4f1cj082spdiok0w6` (`wife_id`),

CONSTRAINT `FK_4565w2c4f1cj082spdiok0w6` FOREIGN KEY (`wife_id`) REFERENCES `wife` (`id`)

)

2.使用@JoinColumns(

{

@JoinColumn(name="wifeId",referencedColumnName="id"),

@JoinColumn(name="wifeName",referencedColumnName="name")

}

)

可以自定义husband表中关联联合主键的列的名称

?

?

2.加入以上Annotation之后,再观察结果show create table husband;

CREATE TABLE `husband` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`wifeId` int(11) DEFAULT NULL,

`wifeName` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `FK_sdshifqwgidsm93jdh5kfl0e4` (`wifeId`,`wifeName`),

CONSTRAINT `FK_sdshifqwgidsm93jdh5kfl0e4` FOREIGN KEY (`wifeId`, `wifeName`) REFERENCES `wife` (`id`, `name`)

)

?

第六种:组建映射

一、Annotation配置

1.不将wife.java作为实体类

2.在husband.java中,使用组件映射,关联wife.java中的wifeName和age

范例:

Wife.java中,不将wife作为是实体类

package com.zgy.hibernate.model;



import java.io.Serializable;



import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.IdClass;

import javax.persistence.OneToOne;

import javax.persistence.PrimaryKeyJoinColumn;





public class Wife {

private String wifeName;

private int age;





public String getWifeName() {

return wifeName;

}



public void setWifeName(String wifeName) {

this.wifeName = wifeName;

}



public int getAge() {

return age;

}