Hi所有創建一個到多個的任務。 我有2個表格,一個是Emp,另一個是Project。 One Emp可以有很多Project。 這些是我的bean類。休眠一對多關係,子表格foriegn密鑰表設置0值
public class Emp {
public List<Project> getProjectList() {
return projectList;
}
public void setProjectList(List<Project> projectList) {
this.projectList = projectList;
}
@Generated(value = { "id" })
@Id
private int id;
@Column(name="name")
private String name;
@Column(name="city")
private String city;
@OneToMany(cascade=CascadeType.ALL , fetch=FetchType.LAZY, mappedBy="emp",orphanRemoval=true)
private List<Project> projectList=new ArrayList<Project>();
public void addProject(Project project) {
this.projectList.add(project);
if (project.getEmp() != this) {
project.setEmployer(this);
}
}
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;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
這是項目類
@Entity
public class Project {
@Generated(value = { "id" })
@Id
private int id;
@Column(name="name")
private String name;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="empid", nullable=false)
private Emp emp;
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;
}
public Emp getEmp() {
return emp;
}
public void setEmp(Emp emp) {
this.emp = emp;
}
public void setEmployer(Emp emp2) {
this.emp = emp2;
if (!emp2.getProjectList().contains(this)) { // warning this may cause performance issues if you have a large data set since this operation is O(n)
emp.getProjectList().add(this);
}
}
}
這是我的代碼保存在父母和孩子
public class MainTest {
public static void main(String[] args) {
Configuration configuration = new Configuration();
configuration.addAnnotatedClass(org.hibernate.model.Emp.class);
configuration.addAnnotatedClass(org.hibernate.model.Project.class);
configuration.addAnnotatedClass(org.hibernate.model.Stu.class);
configuration.addAnnotatedClass(org.hibernate.model.Address.class);
configuration.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/test");
configuration.setProperty("hibernate.connection.password", "123456789");
configuration.setProperty("hibernate.connection.username", "root");
configuration.setProperty("hibernate.show_sql", "true");
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
org.hibernate.Transaction transaction =session.beginTransaction();
Emp emp = new Emp();
emp.setCity("nagaland");
emp.setName("divyffa");
Project project1=new Project();
project1.setName("dotedxvc");
emp.addProject(project1);
session.save(emp);
transaction.commit();
session.close();
}
}
這是我的表結構
CREATE TABLE `emp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
`city` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
CREATE TABLE `project` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
`empid` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `forgn-project_idx` (`empid`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
每當我保存我的父類我的子類也獲得保存,但empid列值被保存爲0.每次保存爲0.
請我不知道什麼是問題並感謝您的幫助。 我有搜索關於這個問題,但沒有找到任何結果。
你見過我的pojo.I有添加我的對象兩側的方法。它同步這兩個對象 –
對不起我的壞..另一個重點是使用獲取類型@ManyToOne(fetch = FetchType.LAZY ) – user3014595