Tôi đang sử dụng JPA2 với thực hiện EclipseLinkmapping @ManyToOne thất bại trong việc tiết kiệm cha mẹ ID
! [Cấu trúc bảng đơn giản] [1]
Dưới đây là hai bảng mà tôi cố gắng để lập bản đồ và Chú thích JPA.
public class Story implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
Integer id;
@Temporal(TemporalType.TIMESTAMP)
@Column (name="DATE_CREATED")
Date dateCreated;
String title;
String description;
@Column(name="AUTHOR_ID")
Integer authorId;
@Column(name="COUNTRY_ID")
Integer countryId;
private String reviews;
@OneToMany(mappedBy = "story", cascade=CascadeType.ALL)
private List<Tip> tipList;
}
public class Tip implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
private String description;
private Integer vote;
@ManyToOne (cascade=CascadeType.ALL)
@JoinColumn(name="STORY_ID", referencedColumnName="ID")
private Story story;
}
Là một ví dụ đơn giản tôi muốn tồn tại một câu chuyện và một số câu chuyện lời khuyên trong cùng một giao dịch có liên quan. Dưới đây là phần mã mà không rằng:
Story newStory = new Story(title, body, ...);
EntityTransaction transaction = em.getTransaction().begin();
boolean completed = storyService.create(newStory);
//The tips are saved as a List<String>. This methods creates the needed List<Tip> from the Strings
List<Tip> tips = TipUtil.getTipList(tipList);
newStory.setTipList(tips)
transaction.commit();
Tôi không có lỗi và tất cả các đối tượng được tiếp tục tồn tại cơ sở dữ liệu. Vấn đề là trong bảng mẹo trường story_id
luôn là NULL
. Tôi có thể tưởng tượng rằng JPA không thể lấy số id
mới từ bảng câu chuyện. Cách tiếp cận chính xác ở đây là gì?
LE
Trong tình trạng hiện tại của mã, Tip
thực thể đang tồn nhưng ID đất nước vẫn null.
Tôi tự hỏi nếu không có cách nào tự động hơn để thực hiện việc này. Hơn nữa, tôi thực sự không nghĩ rằng việc xóa trường câu chuyện trong Mẹo sẽ là một ý tưởng thông minh, bởi vì theo cách này, anh ta cần phải loại bỏ '@PrimaryKeyJoinColumn (name =" STORY_ID ", referencedColumnName =" ID ") ', để lại JPA không có đầu mối về cách nó sẽ làm cho tham gia. Đây chỉ là những gì tôi hiểu từ đọc một chút về chủ đề này. Vui lòng cho tôi biết nếu tôi sai. – Dragos
Ebean có giải pháp tự động cho giải pháp này, nhưng việc triển khai JPA không cung cấp giải pháp tự động. – Palesz