Hầu hết Kotlin JPA dụ mã trông như thế nàyKotlin với JPA/Hibernate: không lười tải mà không có `mở`?
class Person(val name: String, val age: Int) { /* ... */ }
hoặc thậm chí
data class Person(val name: String="", val age: Int=0) { /* ... */ }
Bây giờ, Hibernate User Guide, và tôi cũng nghĩ nhiều ORMs khác, tiểu bang mà họ thường muốn tạo proxy hoặc mở rộng lớp mô hình, nhưng để cho phép điều đó trong Kotlin, lớp học phải được định nghĩa rõ ràng open
. Điều này là không thể với các lớp dữ liệu và tôi giả sử, đánh giá từ kinh nghiệm của riêng tôi, rằng hầu hết mọi người không nghĩ về nó khi viết các thực thể JPA trong Kotlin.
Vì vậy, đến câu hỏi của tôi (đây là stackoverflow sau khi tất cả), nó là đủ để làm
open class Person(val name: String, val age: Int) { /* ... */ }
hoặc chúng tôi sẽ thực sự phải làm
open class Person(open val name: String, open val age: Int) { /* ... */ }
không không cần thiết cản trở việc ORM khi thực hiện công việc của mình đúng cách?
Nếu nó thực sự có hại, có lẽ chúng tôi nên đề xuất thêm cảnh báo cho IntelliJ IDEA, rằng nếu một lớp học có chú thích @Entity
, nó phải được xác định open
.
Tôi không thấy từ "có hại" được áp dụng tại đây như thế nào. Bạn có thể làm rõ việc sử dụng nó hay xóa nó khỏi câu hỏi nếu nó không quan trọng? – voddan
Chủ yếu là thực tế ít nhất Hibernate không thể lười biếng tải lớp học cuối cùng hoặc có phương pháp truy cập cuối cùng và sử dụng lớp dữ liệu cho JPA thường giống như một điều tốt để làm, nhưng thực sự có thể làm tổn thương hiệu suất, bởi vì họ là cuối cùng theo định nghĩa (tại thời điểm này ít nhất, nghe nói rằng có thể thay đổi). Tiêu đề là rất clickbaity, bởi vì tôi nghĩ rằng đó phải là một cái gì đó phổ biến hơn và ngăn chặn ví dụ. các ứng dụng được chuyển đến Kotlin có hiệu suất kém hơn so với đối tác Java và người dùng đổ lỗi cho Kotlin:/ – johnp
Cảm ơn bạn đã diễn giải câu hỏi! – voddan