2011-01-07 23 views
5

Tôi có một thực thể được ánh xạ có thuộc tính enum. Bằng cách loking tại tệp nhật ký, bất cứ khi nào tôi chạy một câu lệnh chọn trên thực thể đó, kết quả là một bản cập nhật ngay lập tức sau. Ví dụ, nếu tập hợp kết quả chứa 100 hồ sơ, sau đó tôi có:Sử dụng Enum trong Hibernate nguyên nhân được chọn theo sau là một câu lệnh cập nhật

[INFO org... select...] 
[INFO org... update... where id=?] 
[INFO org... update... where id=?] 

.... lặp đi lặp lại 100 lần

Nếu tôi đánh dấu các tài sản như cập nhật = false vấn đề biến mất. Enum được gán máng một lớp chuyển đổi enum, mà tôi đã sao chép từ một cuốn sách nổi tiếng. Vì vậy, tôi không biết nếu tôi chỉ cần sao chép và dán mã. Đây là cách khai báo trên tệp hbm.

<typedef class="mypackage.HbnEnumConverter" name="the_type"> 
    <param name="enumClassname">mypackage.TheType</param> 
</typedef> 

Bạn có thể chỉ ra một hướng để điều tra vấn đề này không? Bên cạnh đó, hậu quả của việc cập nhật = false trên trường ngủ đông là gì?

cảm ơn

+0

Theo như tôi hiểu, trong "sách nổi tiếng" phương pháp vệ sinh của loại người dùng bị bỏ qua, bạn có chắc là bạn đã triển khai đúng cách (đặc biệt là 'bằng (Object, Object)')? – axtavt

Trả lời

2

Hibernate sẽ tạo bản cập nhật nếu đối tượng của bạn bị đánh dấu là bẩn.

Xem nhật ký để xem nếu ngủ đông đánh dấu đối tượng của bạn là bẩn.

nếu bạn có thứ gì đó tương tự bên dưới.

class Entity{ 

    public YourEnum getEnum() { 
    return yourEnum==null?YourEnum.SOME_VALUE:....; 
    } 
} 

Hoặc có thể trong phương pháp Enum.equals bạn trả về false cho trường hợp có thể bằng (null, null)?

bằng phương pháp sẽ trả về true nếu đối tượng được so sánh giống nhau và sai khác nếu sử dụng phương thức ngủ đông bằng cách quyết định xem đối tượng có bị bẩn hay không.

+0

bạn có thể vui lòng cho tôi biết thêm chi tiết về vấn đề bằng (null, null) không? – Leonardo

+0

Nó không phải là một trường hợp đặc biệt, chỉ là trường hợp đó là nhiều lỗi dễ bị. bằng phương pháp nên trả lại kết quả chính xác để đối tượng có thể được đánh dấu bẩn một cách chính xác. – fmucar

+0

bằng phương thức nên trả về true nếu các đối tượng được so sánh giống nhau và sai nếu không thì hibernate sử dụng phương thức bằng để quyết định xem đối tượng có bị bẩn hay không. – fmucar

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