부모 :스프링 부팅 스타터 데이터 JPA @OneToMany 새로운 아이를 삽입하지 않습니다
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class A {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long id;
@OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true)
public List<Child> child = new LinkedList<>();
}
아이 :
@Entity
public class Child {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long child_id;
}
저장소 :
import org.springframework.data.repository.CrudRepository;
@Transactional
public interface ARepository extends CrudRepository<A,Long> {
@Query("SELECT x FROM A x WHERE x.syncTimestamp IS NULL")
List<A> findAs();
}
지속성 : 업데이트
public class SomeClass {
@Autowired
private ARepository repo;
public void someMethod() {
List<A> as = repo.findAs();
A firstA = as.get(0);
firstA.child.add(new Child());
repo.save(firstA);
}
}
새 A 개체를 삽입하면 모든 항목이 올바르게 작동하고 모든 자식이 데이터베이스에 잘 삽입됩니다.
그러나 데이터베이스에서 A 개체를로드하고 일부 자식을 목록에 추가 한 다음 개체를 업데이트하면 새 자식이 삽입되지 않습니다.
CascadeType에 대한 문서에 따르면 ALL은이를 삽입해야합니다.
어떻게 해결할 수 있습니까?
@Entity
public class A {
...
@OneToMany(mappedBy = "a", cascade = {CascadeType.ALL}, orphanRemoval = true)
public List<Child> child = new LinkedList<>();
}
@Entity
public class Child {
...
@ManyToOne
@JoinColumn(name = "your_table_name")
private A a;
...
}
당신은 당신이 실제로 /가 계속로드 코드를 추가 할 수 있습니다 : 당신의 아이 엔티티가 업데이트 얻을 것이다 방법을 다음에 다시 시도하십시오? – Adam
done @ Adam,보세요 parting –