2012-08-05 22 views
5

Tôi có ứng dụng java ứng dụng hiện tại của ứng dụng google chạy với jpa và bây giờ tôi đang cố di chuyển để phản đối cho nhiều mục đích khác nhau.Google App Engine java thay thế jpa @ OneToMany/@ ManyToOne với objectify

Ứng dụng hiện tại có biểu diễn dưới đây của các thực thể.

Class Parent{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key key; 

    @OneToMany(cascade=CascadeType.ALL, mappedBy="parent") 
    private List<Child> childs = null; 
} 

Class Child{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key key; 

    @ManyToOne 
    private Parent parent; 

} 

Làm cách nào để tôi có được đại diện trên trong Objectify? Tôi đang sử dụng objectify4.
Tôi đã thấy @Parent, nhưng có vẻ như không thể tải danh sách các thực thể con trực tiếp trong khi tìm nạp phụ huynh?

Cảm ơn,

Ramesh.V

Trả lời

2

làm thành khách quan sử dụng khác nhau concepts hơn lưu trữ dữ liệu quan hệ và ORMs. Các mối quan hệ được xây dựng bằng cách sử dụng Key và không được tải tự động. Bạn có thể đọc về mô hình hóa các mối quan hệ trong Objectify here. Mối quan hệ @Parentsomething special và không phải là mối quan hệ có liên quan đến các mối quan hệ 1: n hoặc n: m.

Vì vậy, về cơ bản bạn có

class Parent { 
    Key<Child>[] childs; 
} 

class Child { 
    Key<Parent> parent; 
} 

Và sau đó bạn sẽ nhận được các đối tượng thông qua dịch vụ Objectfy, ví dụ

Parent aParent = ofy.get(aChild.parent); 

Không có bộ sưu tập được tải nhẹ nhàng. Nếu bạn muốn xây dựng một bộ các đối tượng, bạn cần phải làm điều đó một cách rõ ràng.

+0

Cảm ơn phản hồi của bạn, là nó có thể lấy các đối tượng trẻ em từ cha mẹ mà không cần lưu trữ các phím con/tài liệu tham khảo trong mẹ. –

+0

Các liên kết được biểu diễn bằng 'Phím' để bạn cần chúng trong 'Parent' hoặc' Child'. Nếu bạn có chúng trong cả hai bạn tạo ra một hiệp hội hai chiều khó duy trì và thường không hữu ích lắm. Bạn có thể bỏ mảng 'Key' trong' Parent'. Sau đó, bạn chỉ cần các phương thức của Objectify để lọc để nhận tất cả các đối tượng 'Child' với một' Parent's 'Key' cụ thể. Điều này đặc biệt hữu ích nếu bạn có một số lượng lớn trẻ em cần được lọc tiếp theo các tiêu chí hoặc phân trang nhất định. –

+0

Nhưng JPA hoạt động như thế nào mà không lưu trữ khóa ở cha mẹ hoặc con? Ứng dụng java GAE hiện có của tôi sử dụng JPA và tôi thấy kho dữ liệu không có bất kỳ khóa nào được lưu trữ ở cả con hoặc cha mẹ. Và nó chỉ có mối quan hệ cha mẹ con không có chìa khóa được lưu trữ trong cả cha mẹ hoặc con. Thay đổi của tôi bây giờ sẽ không ảnh hưởng đến cơ sở dữ liệu hiện có. Tôi làm nó như thế nào. Cảm ơn bạn đã khám phá chi tiết. –

Các vấn đề liên quan