こんにちは、すべて1対多のrealtionshipを作成しています。 私は2つのテーブルを持っているEmpと他のプロジェクトです。 1つのEmpは多くのプロジェクトを持つことができます。 これは私のBeanクラスです。1対多の関係、子テーブル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;
}
}
これはこれは、これらが私のテーブルの構造
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;
である私の親を保存するためのコードと子
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();
}
}
ある
@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);
}
}
}
プロジェクトのクラスです私の親クラスを保存するときはいつでも子クラスも保存されますが、empidカラムの値は0として保存されています。
私は何が問題なのか分かりませんし、助けてください。 この問題について検索しましたが、結果は見つかりませんでした。
あなたは私のpojo.Iを見たことがあります両方の側に私のオブジェクトを追加したメソッドを追加しました。それは両方のオブジェクトを同期させます –
残念ながら私の悪い..フォーカスの別のポイントはフェッチタイプ@ManyToOneを使用しています(fetch = FetchType.LAZY ) – user3014595