hibernate oneToOne annotation 外键关联 单向+双向
用的JPA技术
单向:
解释:用Users和Customer定义oneToOne单向关联,用一个Users对应一个Customer
[Users]
package pojo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
@Entity
public class Users {
private int id;
private String level;
private String title;
private Customer customer;
@OneToOne
@JoinColumn(name="customer____tables") //这里的JoinColumn定义为外键的名称,都是以one一方为基准
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
@Id
@GeneratedValue //id自增
public int getId() {
return id;
}
public String getLevel() {
return level;
}
public String getTitle() {
return title;
}
public void setId(int id) {
this.id = id;
}
public void setLevel(String level) {
this.level = level;
}
public void setTitle(String title) {
this.title = title;
}
}
[Customers]
package pojo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Customer {
private int id;
private String name;
private String password;
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
}
双向:
解释:用Users和Customer定义oneToOne双向关联,一个Users对应一个Customer
[Users]
package pojo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
@Entity
public class Users {
private int id;
private String level;
private String title;
private Customer customer;
@OneToOne
@JoinColumn(name="customer____tables")
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getLevel() {
return level;
}
public String getTitle() {
return title;
}
public void setId(int id) {
this.id = id;
}
public void setLevel(String level) {
this.level = level;
}
public void setTitle(String title) {
this.title = title;
}
}
[Customers]
package pojo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Customer {
private int id;
private String name;
private String password;
private Users users; //需要加getter/setter方法
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
@OneToOne(mappedBy="customer") //只要是双向关联,必用mappedBy ,其中的值为另一方定义的对象,即getter后面的那部分
public Users getUsers() {
return users;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsers(Users users) {
this.users = users;
}
}
[test]
public class testUsers {
@Test
public void testSchemaExport() {
// SessionFactory sessionFactory = new AnnotationConfiguration()
// .configure().buildSessionFactory();
SchemaExport export = new SchemaExport(
new AnnotationConfiguration().configure());
export.create(true, false);
// Session session = sessionFactory.getCurrentSession();
// session.beginTransaction();
// session.getTransaction().commit();
}
}