package one_to_one;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import com.sun.org.apache.xml.internal.resolver.readers.TR9401CatalogReader;
@Table(name = "JPA_DEPARTMENT")
@Entity
public class Department {
private Integer id;
private String name;
private Manager manager;
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//注意:1-2关联关系,需要添加unique = true
@JoinColumn(name = "mgr_id", unique = true)
@OneToOne(fetch=FetchType.LAZY)
public Manager getManager() {
return manager;
}
public void setManager(Manager manager) {
this.manager = manager;
}
}
知识兔package one_to_one;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Table(name = "JPA_MANAGER")
@Entity
public class Manager {
private Integer id;
private String mgrName;
private Department department;
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getMgrName() {
return mgrName;
}
public void setMgrName(String mgrName) {
this.mgrName = mgrName;
}
@OneToOne(mappedBy = "manager")
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
知识兔package one_to_one;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class Main3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String persistenceUnitName = "jpa-1";
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
// oneToOnePersist(entityManager);
oneToOneFind(entityManager);
transaction.commit();
entityManager.close();
entityManagerFactory.close();
}
// 建议先保存不维护关联关系的一方,即没有外键的一方,这样不会多出update语句
private static void oneToOnePersist(EntityManager entityManager) {
Manager manager = new Manager();
manager.setMgrName("M-AA");
Department department = new Department();
department.setName("D-AA");
manager.setDepartment(department);
department.setManager(manager);
entityManager.persist(manager);
entityManager.persist(department);
}
// 默认通过左连接加载对象
// 如果通过设置@OneToOne的fetch属性为lazy,还是会用左连接,且会多查询
private static void oneToOneFind(EntityManager entityManager) {
Department dept = entityManager.find(Department.class, 1);
System.out.println(dept);
System.out.println(dept.getManager().getMgrName());
}
}
知识兔