2010-07-16 46 views
11

Tôi mới bắt đầu đọc JPA và triển khai trong chế độ ngủ đông để hiểu chi tiết. nhưng, để tiếp tục phát triển cho đến lúc đó, bạn có thể giúp làm rõ một qn cơ bản.Khi nào sử dụng, không sử dụng, OneToOne và ManyToOne

  1. Khi sử dụng OneToOne
    Tôi có thể sử dụng OneToOne nếu người quản lý thực thể cần để xử lý các persistency của đối tượng có liên quan. vấn đề là, tôi luôn có thể sống mà không chỉ định oneToOne, nhưng sau đó trách nhiệm là trên tôi để quản lý mối quan hệ và đảm bảo rằng các đối tượng được giới thiệu không ở trạng thái thoáng qua. Điều này có đúng không?

  2. Khi nào sử dụng hoặc không sử dụng, ManyToOne
    Giả sử tôi định nghĩa một lớp Nhân viên và cần xác định mối liên hệ với Nhà tuyển dụng. Trong trường hợp này, tôi có cần phải xác định manyToOne như dưới đây, hoặc những gì nếu không muốn nói

    @Entity 
        public class Employer { 
        String name; 
        } 
    
        @Entity 
        class Employee { 
         String name; 
         @ManytoOne //or not?? 
         Employer employer; 
         } 
    

nhờ

Trả lời

6

1: Khi làm việc với các mối quan hệ thực thể, bạn phải luôn luôn sử dụng các chú thích thích hợp (OneToOne, OneToMany, ManyToOne hoặc ManyToMany). Lựa chọn bạn có là liệu bạn có muốn đảm bảo thực thể đằng sau mối quan hệ không phải là chính bạn hay không, hoặc chỉ định thuộc tính cascade trên chú thích OneToOne để cho JPA xử lý điều đó cho bạn. Điều này cho phép bạn tạo ra một đồ thị toàn bộ các đối tượng và kiên trì chúng trong một cuộc gọi:

@OneToOne(cascade = CascadeType.ALL) 
private MyType myType; 

2: Vâng, một mối quan hệ chủ-nhân viên âm thanh như một mối quan hệ OneToMany, và mối quan hệ nhân viên sử dụng lao động sẽ ManyToOne . Nếu bạn muốn có cả hai hướng, đó được gọi là mối quan hệ hai hướng. Hãy xem relevant section in the Java EE tutorial để biết chi tiết.

JPA section in the Java EE tutorial là một tham chiếu tốt để bắt đầu.

3

Khi nào sử dụng OneToOne Tôi có thể sử dụng OneToOne nếu người quản lý thực thể cần xử lý sự kiên trì của đối tượng liên quan. vấn đề là, tôi luôn có thể sống mà không chỉ định oneToOne, nhưng sau đó trách nhiệm là trên tôi để quản lý mối quan hệ và đảm bảo rằng các đối tượng được giới thiệu không ở trạng thái thoáng qua. Điều này có đúng không?

Bạn không cần đánh dấu mối quan hệ nếu bạn không muốn người quản lý thực thể xử lý các hoạt động. Bạn có thể có thực thể liên quan dưới dạng một trường tạm thời và duy trì thực thể liên quan theo cách thủ công. Nhưng trong trường hợp đó, bạn sẽ không sử dụng toàn bộ danh sách các tính năng mà JPA cung cấp.

Bằng cách đánh dấu các mối quan hệ, EntityManager sẽ biết về cấu trúc cơ sở dữ liệu. Và đó là điều cần thiết nếu bạn muốn sử dụng sức mạnh của JPA.

Eg: class Car 
     { 
     @OneToOne 
     Warehouse warehouse; 
     //other fields 
     } 

Đây

  • tôi có thể lấy đối tượng kho liên quan trong khi lấy một xe

  • tôi có thể tồn tại một đối tượng kho trong khi kiên trì một xe ô tô (với tùy chọn thác như được giải thích bởi các poster bên dưới)

  • tương tự như vậy Cập nhật, Xóa ...

Bên cạnh đó, khi sử dụng JPQL,

bạn có thể đi qua để Kho

như trong

em.createQuery("select c.warehouse from Car c"); 

Những sẽ không làm việc trừ khi bạn đánh dấu mối quan hệ.

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