2012-04-21 34 views
9

Tôi cần trợ giúp lưu trữ bản đồ trong JPA2, trong đó cả khóa và giá trị là enums (Map<Enum, Enum>). Với Hibernate là nhà cung cấp JPA của tôi, nó lưu trữ các enums như một blob nhưng tôi cần dữ liệu được lưu trữ dưới dạng chuỗi. Tôi đã thử các chú thích sau đây để khắc phục vấn đề này:Bản đồ cửa hàng <Enum, Enum> làm chuỗi

@ElementCollection(fetch = FetchType.EAGER) 
@MapKeyEnumerated(value = EnumType.STRING) 
public Map<Enum, Enum> getElementsMap() { 
    return elementsMap; 
} 

Nhưng dữ liệu vẫn được lưu trữ vào DB dưới dạng blob. đã có ai giải quyết được vấn đề này chưa?

+2

Lưu một bản đồ như là một chuỗi doesn' t âm thanh hợp lý ở tất cả. Bạn đã nghe về chuẩn hóa dữ liệu chưa? –

+0

Xin lỗi, tôi viết câu hỏi này theo cách sai, bây giờ nó đã được sửa, ý tôi là chìa khóa và giá trị của nó. – user1289877

+0

Bạn chỉ có thể sử dụng 'toString()' trên cả khóa và giá trị. Có chuyện gì vậy? –

Trả lời

1

Hầu hết mọi đối tượng Java đều có toString() method Nếu bạn muốn đại diện cho Bản đồ của mình trong cơ sở dữ liệu, thì tôi đề nghị đây là lựa chọn của bạn.

Tuy nhiên tôi phải hỏi bạn có chắc đó là MAP bạn muốn lưu trữ chứ không phải các yếu tố của khóa hoặc giá trị không?

+0

Vâng, đó là chìa khóa và giá trị của nó, Xin lỗi tôi bắt đầu với JPA2 và hibernate, bạn có thể đăng ở đây những thay đổi trong mã mà tôi phải làm để lưu trữ các khóa và giá trị này như String? – user1289877

3

@Enumerated được sử dụng để xác định loại cho giá trị. Sau bản đồ để bàn nơi cột cho cả khoá và giá trị là varchars và tên của enum sẽ được lưu:

@Enumerated(EnumType.STRING) 
@ElementCollection(fetch = FetchType.EAGER) 
@MapKeyEnumerated(value = EnumType.STRING) 
public Map<MyEnum, MyOtherEnum> elementsMap = new HashMap<>(); 

Nó sẽ sản xuất khoảng sau bảng:

[NAME_OF_ENTITY]_ELEMENTSMAP (
    NAME_OF_ENTITY_ID INTEGER, 
    ELEMENTSMAP VARCHAR(255), 
    ELEMENTSMAP_KEY VARCHAR(255) 
) 
+0

Cảm ơn bài viết của bạn, tôi đã thử nó, nhưng không giúp tôi. Tôi sử dụng postgresql db và hibernate tạo các kiểu dữ liệu int8, bytea, bytea trong bảng. – user1289877

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