2010-05-11 32 views
6

Tại sao JPA yêu cầu một hàm tạo no-arg cho các đối tượng miền? Tôi đang sử dụng eclipselink và chỉ có ngoại lệ này trong quá trình triển khai.Tại sao JPA yêu cầu một hàm tạo no-arg cho các đối tượng miền?

Exception [EclipseLink-63] (Eclipse Persistence Services-1.1.0.r3639-SNAPSHOT): 
org.eclipse.persistence.exceptions.DescriptorException 

Exception Description: The instance creation method 
[com.me.model.UserVO.<Default Constructor>], with no parameters, 
    does not exist, or is not accessible. 
Internal Exception: java.lang.NoSuchMethodException: 
    com.me.model.UserVO.<init>() 
Descriptor: RelationalDescriptor(com.me.model.UserVO --> 
    [DatabaseTable(user)]) 

Trả lời

9

Do thường xảy ra nhà cung cấp JPA phải khởi tạo đối tượng miền của bạn một cách linh hoạt. Nó không thể làm như vậy, trừ khi có một constructor no-arg - nó không thể đoán được đối số nên là gì.

+0

Điều đó cũng có nghĩa là nhà xây dựng no-arg có thể được gọi sau khi kiên trì một thực thể (ví dụ: khi người quản lý thực thể nạp một thực thể ban đầu). Trong trường hợp này, chúng ta không nên khởi tạo bất kỳ trường nào hoặc thực hiện một số công việc khác trong hàm dựng, phải không? – Theo

+0

@Theo - vâng, hàm tạo được gọi khi bạn tải một thực thể. – Bozho

3

Cũng lưu ý rằng đây là không phải là tùy thuộc vào nhà cung cấp. Nó là một đặc điểm kỹ thuật JPA.

JPA v2.0 JSR-317 và v2.1 JSR-338 nói:

lớp

Thực thể phải có một constructor không có arg. Lớp thực thể cũng có thể có các hàm tạo khác. Nhà xây dựng no-arg phải công khai hoặc được bảo vệ.

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