2011-11-21 30 views
6

Xin chào tất cả các nhà phát triển bệnh nhân sử dụng biểu đồ dữ liệu mùa xuân. Vì có ít tài liệu hơn và phạm vi kiểm tra khá kém nên đôi khi rất khó hiểu hành vi mong đợi của khung làm việc cơ bản là khung làm việc như thế nào. Hiện tại tôi có một số câu hỏi liên quan đến phương pháp tìm nạp mới được giới thiệu trong SDG 1.1. Như đối diện với SDG 1.1 ghi \ đọc qua trong 2.0 chỉ quan hệ và đối tượng có liên quan chú thích với @Fetch chú thích là háo hức người khác lấy có nghĩa vụ phải được lấy uể oải .. và bây giờ câu hỏi đầu tiên của tôi:Tìm nạp chú thích trong SDG 2.0, tìm nạp câu hỏi chiến lược

  • Có thể cấu hình SDG để nếu việc tải thực thể và gọi getter về mối quan hệ lười biếng diễn ra trong cùng một giao dịch, bộ sưu tập được yêu cầu sẽ được tìm nạp tự động? Loại Persistence Bối cảnh trong phạm vi giao dịch hoặc có thể được lên kế hoạch cho các tính năng bản phát hành.
  • Tôi làm cách nào để tìm nạp bộ sưu tập lười biếng cùng một lúc cho chú thích @RelatedTo? Phương thức fetch() trên từ Neo4jOperation cho phép tìm nạp chỉ một thực thể. Tôi có phải lặp qua toàn bộ danh sách và tìm nạp thực thể cho từng đối tượng không? Điều gì sẽ là cách tốt nhất để kiểm tra nếu đối tượng nhất định đã được lấy/khởi tạo hay không?
  • Như đề nghị tôi nghĩ rằng nó sẽ trực quan hơn nếu có loại lười biếng tải ngoại lệ ném thay vì nhận được NPE khi làm việc với các đối tượng không được khởi tạo. Hơn nữa, hành vi gây hiểu nhầm là khi đối tượng không được khởi tạo và tất cả các thuộc tính thành viên đều không có id, bằng phương thức có thể cung cấp đúng cho các đối tượng khác nhau mà chưa được khởi tạo, đó là các vấn đề khá nghiêm trọng, ví dụ như thiết bị
  • Một vấn đề khác mà tôi nhận thấy khi làm việc với SDG 2.0.0.RC1 là như sau: khi tôi thêm đối tượng mới để không lấy bộ sưu tập đôi khi được thêm vào và duy trì đúng cách, tuy nhiên đôi khi không. Tôi đã viết thử nghiệm cho trường hợp này và nó hoạt động theo cách không xác định. Đôi khi nó thất bại đôi khi kết thúc với thành công. Đây là trường hợp sử dụng:

    Group groupFromDb = neoTemplate.findOne(group.getId(), Group.class); 
    assertNotNull(groupFromDb); 
    assertEquals("Number of members must be equals to 1", 1, groupFromDb.getMembers().size()); 
    User secondMember = UserMappingTest.createUser("secondMember"); 
    groupFromDb.addMember(secondMember); 
    neoTemplate.save(groupFromDb); 
    Group groupAfterChange = neoTemplate.findOne(groupFromDb.getId(), Group.class); 
    assertNotNull(groupAfterChange); 
    assertEquals("Number of members must be equals to saved entity", groupFromDb.getMembers().size(), groupAfterChange.getMembers().size()); 
    assertEquals("Number of members must be equals to 2", 2, groupAfterChange.getMembers().size()); 
    

thử nghiệm này thất bại đôi khi trên khẳng định cuối cùng, trong đó sẽ có nghĩa là đôi khi thành viên được thêm vào các thiết lập và đôi khi không. Tôi đoán rằng vấn đề nằm ở đâu đó trong ManagedFieldAccessorSet, nhưng rất khó để nói vì điều này là không xác định. Tôi chạy thử nghiệm với mvn2 và mvn3 với java 1.6_22 và 1.6_27 và tôi đã luôn luôn có kết quả tương tự: đôi khi là Ok đôi khi kiểm tra thất bại. Thực hiện các tài khoản bằng với vẻ như sau:

@Override 
public boolean equals(final Object other) { 
    if (!(other instanceof User)) { 
     return false; 
    } 
    User castOther = (User) other; 
    if(castOther.getId() == this.getId()) { 
     return true; 
    } 
    return new EqualsBuilder().append(username, castOther.username).isEquals(); 
} 

- Tôi thấy nó cũng có một chút vấn đề đó cho các đối tượng chú thích với @Fetch java HashSet được sử dụng đó là serializable, trong khi sử dụng cho các lĩnh vực lười nạp ManagedFieldAccessorSet được sử dụng mà không phải là serializable và nguyên nhân không ngoại lệ serializable.

Mọi trợ giúp hoặc lời khuyên đều được chào đón. Cảm ơn trước!

Trả lời

3

Cách tiếp cận ánh xạ đơn giản chỉ được thêm vào Spring Data Neo4j 2.0, do đó, nó không phải là trưởng thành như ánh xạ AspectJ nâng cao. Chúng tôi hiện đang làm việc trên documenting nó rộng rãi hơn.

Tùy chọn tải chậm cũng được thêm gần đây. Vì vậy, phản hồi của bạn rất được hoan nghênh.

Ngay bây giờ SDN không sử dụng phương pháp proxy cho các đối tượng được nạp lazily. Vì vậy, "tìm nạp trên truy cập" tự động chưa được hỗ trợ. Đó là lý do tại sao cũng không có ngoại lệ được ném khi truy cập các trường không được tải và không có phương tiện "khám phá" nếu một thực thể không được tải đầy đủ.

Trong ảnh chụp nhanh hiện tại, có hoạt động template.fetch() để tải đầy đủ các đối tượng và bộ sưu tập được tải xuống lười biếng.

Chúng tôi sẽ xem xét vấn đề HashSet vs. ManagedSet, đúng là đây không phải là giải pháp tốt.

Đối với trường hợp thử nghiệm. hàm getId() trả về đối tượng Long hoặc long nguyên thủy? Có thể sử dụng getId().equals(castOther.getId()) ở đây vì tính bình đẳng tham chiếu không được đảm bảo cho các đối tượng Number.

+0

Hi Michael thanks a lot cho phản hồi của bạn. Nó là tốt để biết trạng thái hiện tại của dự án là gì. Hiện tại, vì dự án đang ở giai đoạn rất sớm nên vấn đề này không quan trọng đối với chúng tôi - chúng tôi có thể thiết lập các mối quan hệ "tạm thời" để được tìm nạp háo hức và sau đó nó hoạt động mà không có bất kỳ vấn đề gì. Mẹo với Long là đúng, tuy nhiên sau khi thay đổi nó thành bằng không giúp đỡ. Điều chúng tôi nhận thấy là, khi chúng tôi không sử dụng "doanh nghiệp" bằng cách thực hiện, nhưng chúng tôi chỉ sử dụng id và trả về bằng false khi id không bằng nhau, sau đó thêm các phần tử mới vào bộ sưu tập. Chúc mừng Marcin – Sempa

+0

Điều cần biết. Dự án đã thực sự đã một tuổi rồi. Chỉ có ánh xạ đơn giản mới. Vui lòng tiếp tục cung cấp phản hồi tốt như vậy. Trong "kinh doanh" -equals bạn có thể kiểm tra một trong hai tên người dùng là null? Bạn cũng có thể hỏi tại danh sách gửi thư # neo4j. –

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