2010-03-01 24 views
12

HI,thuộc tính JPA java.net.URL

Tôi có một đối tượng có một phần URL-Thông tin liên kết với nó. Hiện nay tôi lưu URL này trong một tài sản Chuỗi đơn giản, nhưng java.net.URL sẽ cung cấp cho tôi với goodies bổ sung như phát hiện các URL bị thay đổi, vv

Mặt khác tôi sẽ xem xét nó rất xấu xí, nếu JPA chỉ cần tạo LOB cho đối tượng URL. Có ai biết làm thế nào một tài sản của loại java.net.URL sẽ được lưu giữ tới cơ sở dữ liệu bởi các nhà cung cấp JPA tuân thủ?

+0

Tôi không nghĩ rằng thông số JPA cung cấp cho việc này. Bạn đang sử dụng triển khai nào? – skaffman

+2

ví dụ: Hibernate có phần mở rộng JPA cho số này – skaffman

+0

ví dụ: DataNucleus có phần mở rộng JPA (và JDO) cho phần này (và nhiều loại tiêu chuẩn khác) – DataNucleus

Trả lời

11

Theo spec JPA:

Các ruộng dai dẳng hoặc tài sản của một thực thể của các loại sau đây: Java loại nguyên thủy; java.lang.String; các loại tuần tự Java khác (bao gồm các trình bao bọc của các loại nguyên thủy , java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar [7], java.sql.Date, java.sql.Time, java.sql.Timestamp, các loại có thể được sắp xếp theo kiểu người dùng, byte [], Byte [], char [], andCharacter []); enums; loại thực thể và/hoặc bộ sưu tập các loại thực thể; và các lớp có thể nhúng (xem phần 2.1.5).

Cộng với hỗ trợ cho bộ sưu tập. Nhưng không có hỗ trợ nguyên thủy của URL. Tuy nhiên, họ sẽ được hỗ trợ là Serializable, mà tôi đoán sẽ dẫn đến LOB như bạn đã đề cập.

Nhưng bạn sẽ có thể dễ dàng phá vỡ điều đó: bạn có thể có URL dưới dạng String trong một trường và trình khởi động/trình chuyển đổi chuyển đổi từ String thành URL. Sau đó, bạn ánh xạ trường bằng chú thích.

Hoặc ngược lại: java.lang.URL trong một trường và getter/setter để chuyển đổi từ URL thành String, sau đó bạn ánh xạ bộ thu thập/setter bằng chú thích. Tôi nghĩ nó hoạt động tốt.

1

Bạn cũng có thể sử dụng JPA AttributeConverter như giải thích here để ánh xạ một đối tượng URL vào một cột String (Hibernate nào đó ra khỏi hộp)

Hoặc, nếu bạn chỉ interrested trong xác nhận, bạn có thể sử dụng BeanValidation . Có một chú thích @URL trong phần mở rộng HibernateValidator bạn cũng có thể tạo ra khó khăn riêng của bạn như giải thích here

tôi personnaly thích giải pháp BeanValidation vì xem xét url như java.net.URL mang lại một số phức tạp: cần cho JPA AttributeConverter, JSF Converter, JAXB Adapter .. trong khi đó chỉ là để xác thực

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