Я пытался сохранить таблицу, используя Hibernate.Родительская таблица имеет отношение «один ко многим» со своей дочерней таблицей.Родительская таблица POJO имеет коллекцию дочерних таблиц POJO.
Когда я сохраняю родительскую таблицу, данные также вставляются в дочернюю таблицу, но без внешнего ключа в виде NULL.
Ниже приведен мой код: Родитель:
public class Parent implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Size(max = 45)
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "parentid", cascade = CascadeType.ALL, fetch=FetchType.LAZY)
private Collection<Child> childCollection;
public Parent() {
}
public Parent(Integer id) {
this.id = 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;
}
@XmlTransient
public Collection<Child> getChildCollection() {
return childCollection;
}
public void setChildCollection(Collection<Child> childCollection) {
this.childCollection = childCollection;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Parent)) {
return false;
}
Parent other = (Parent) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "beans.Parent[ id=" + id + " ]";
}
}
Ребенок:
public class Child implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Size(max = 45)
@Column(name = "comments")
private String comments;
@JoinColumn(name = "parentid", referencedColumnName = "id", nullable = false)
@ManyToOne(fetch = FetchType.LAZY)
private Parent parentid;
public Child() {
}
public Child(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public Parent getParentid() {
return parentid;
}
public void setParentid(Parent parentid) {
this.parentid = parentid;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Child)) {
return false;
}
Child other = (Child) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "beans.Child[ id=" + id + " ]";
} }
Сервис гибернации:
public class HibernateSave {
public static void main(String[] args) {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx1 = session.beginTransaction();
Parent parent = new Parent();
Child child1 = new Child();
parent.setName("Name");
child1.setComments("Hey");
//child1.setParentid(parent);
List<Child> childs = new ArrayList<Child>();
childs.add(child1);
parent.setChildCollection(childs);
System.out.println("parent Saved id="+session.save(parent));
tx1.commit();
session.flush(); //address will not get saved without this
System.out.println("*****");
} }
Я нашел решение, в котором я поменял местами моего ребенкародитель, как показано ниже
child1.setParentid(parent);
Но я думаю, можно ли этого избежать.Я надеюсь, что есть какой-то другой путь, когда мне не нужно будет привязывать каждого моего ребенка к его родителю.
Помощь Kinldy, а также, если вы могли бы объяснить.