Câu hỏi cơ bản: Tại sao các đối tượng @Embedded luôn được khởi tạo?@Đối tượng được nhúng tự động không được tự động hóa nếu nó không có trường dữ liệu cơ bản
Quan sát thú vị là Ebean không khởi tạo các đối tượng @Embedded nếu những đối tượng này không chứa kiểu dữ liệu cơ bản (int, boolean ...) hoặc không được chạm vào trước đó. Ví dụ:
@Entity
public class Embedder {
// getNotAutoInstantiated() will return null if this field was not touched before
@Embedded
private NotAutoInstantiated notAutoInstantiated = new NotAutoInstantiated();
// getAutoInstantiated() will always return an instance!
@Embedded
private AutoInstantiated autoInstantiated = new AutoInstantiated();
}
@Embeddable
public class AutoInstantiated {
// theKey is why this embedded object is always instantiated
private int theKey;
private String field1;
}
@Embeddable
public class NotAutoInstantiated {
private String field2;
}
Bạn có thể đang gặp sự cố với xung đột tên trường giữa nhiều đối tượng được nhúng. Thông thường, nhà cung cấp JPA ánh xạ các trường đối tượng được nhúng vào các cột trong bảng cha. Nếu tên trường được nhúng dài, bạn có thể kết thúc với tên trường rút gọn trong cơ sở dữ liệu và do đó va chạm trong tên cột. – Zagrev
Ví dụ có thể là lừa dối. Các tên ngắn hơn nhiều trong mã của tôi và chúng không bắt đầu bằng cùng một tiền tố. Nhưng ngay cả trong ví dụ, các trường bắt đầu bằng "không" và "tự động", vì vậy việc cắt ngắn sẽ không phải là vấn đề lớn. – allprog
Thực ra, tôi đã suy nghĩ về "trường" và "trường". – Zagrev