2009-08-15 6 views
46

Tôi gặp rắc rối thiết lập các loại của một String, nó đi như thếText Field sử dụng Hibernate Chú

public void setTextDesc(String textDesc) { 
    this.textDesc = textDesc; 
} 

@Column(name="DESC") 
@Lob 
public String getTextDesc() { 
    return textDesc; 
} 

và nó đã không làm việc, tôi đã kiểm tra sơ đồ mysql và nó vẫn là varchar (255), tôi cũng đã cố gắng,

@Column(name="DESC", length="9000") 

hoặc

@Column(name="DESC") 
@Type(type="text") 

tôi đang cố gắng để làm cho loại là TEXT, bất kỳ ý tưởng sẽ được cũng đánh giá cao!

+0

Bạn sử dụng phiên bản ngủ đông nào? – Oleksii

Trả lời

77

Bạn nói "Tôi đã kiểm tra sơ đồ mysql và nó vẫn là varchar (255)" - bạn có mong đợi Hibernate tự động thay đổi cơ sở dữ liệu của bạn không? Nó sẽ không. Ngay cả khi bạn có hibernate.hbm2ddl.auto thiết lập, tôi không tin rằng Hibernate sẽ thay đổi định nghĩa cột hiện tại.

Nếu bạn tạo tập lệnh tạo cơ sở dữ liệu mới, @Lob sẽ tạo cột loại "TEXT" nếu bạn không chỉ định chiều dài rõ ràng (hoặc nếu bạn làm và ít hơn 65536). Bạn luôn có thể ép buộc bằng cách khai báo rõ ràng loại trong chú thích @Column, mặc dù lưu ý rằng không di chuyển giữa các cơ sở dữ liệu:

@Column(name="DESC", columnDefinition="TEXT") 
+0

bên phải, tôi bỏ cơ sở dữ liệu mỗi khi tôi thay đổi chú thích, với hbm2ddl.auto, vì vậy tôi hy vọng rằng nó sẽ thay đổi khi tôi kiểm tra lại (xin lỗi vì sự mơ hồ). Bằng cách nào đó, columnDefinition đã không làm việc cho tôi không. Tôi có thiếu cái gì khác không? cảm ơn cho đầu vào, btw. – bernardw

+0

Chỉ định 'columnDefinition' là rõ ràng như bạn có thể nhận được - phải có cái gì đó khác đang diễn ra. Bạn có chắc chắn rằng lớp biên dịch của bạn được nhận bởi Hibernate một cách chính xác? Là nó mở rộng/được mở rộng bởi một số lớp khác? Không thể nghĩ ra bất cứ điều gì khác có thể gây ra điều này, nhưng nếu bạn có thể đăng toàn bộ nguồn của bạn cho lớp này, cấu hình Hibernate của bạn và mô tả cách bạn đang chạy điều này, tôi chắc chắn sẽ nhìn thấy bất cứ điều gì nhảy vào tôi. Ngoài ra, bạn có thể thử thêm một thuộc tính không có thật vào lớp này và tạo lược đồ dưới dạng tệp SQL để xem nó có xuất hiện ở đó (kiểm tra sanity) không? – ChssPly76

+0

Cuối cùng tôi đã làm cho nó hoạt động bằng cách đặt @Indexed lên đầu lớp, nhưng tôi không thể lý do cho bản thân mình tại sao ... – bernardw