2013-06-10 31 views
10

Giả sử có một thực thể Hibernate được cấu hình với truy cập trường bằng các chú thích. Tôi muốn ánh xạ một trường Java class _name sao cho tên logic của nó cho Hibernate là name, ví dụ, khi được gọi từ các truy vấn HQL. Tôi cần điều này chủ yếu cho các bộ sưu tập.Hibernate có thể sử dụng tên logic cho thuộc tính thực thể khác với tên trường?

Dự đoán các đề xuất không đúng: chuyển đổi loại truy cập thành "thuộc tính" là không thể; nhiệm vụ không liên quan gì đến tên của cột vật lý.

+0

Nếu điều này giúp, ý định lớn của tôi là kết hôn với Hibernate với Scala để các bộ sưu tập Java được sử dụng để lập bản đồ ở mức thấp trong khi các trình bao bọc bộ sưu tập Scala phù hợp được hiển thị bên ngoài. Thật không may, mặc dù JVM cho phép các trường và phương thức tự đặt tên, Scala không thể hỗ trợ nó vì vậy dường như không thể tạo trường kiểu Java với 'name' và trình truy cập Scala cho nó được gọi là' name() ' –

+0

Bạn có thể thử một hibernate tùy chỉnh PropertyAccessor, nhưng điều đó dường như bị hỏng: https://hibernate.atlassian.net/browse/HCANN-48 :( – trask

Trả lời

1

Bạn có ý như thế này không?

@Column(name = "name") 
private string _name; 
+0

No. Nó không phải về tên cột. Tôi muốn một HQL như thế này có thể: 'chọn tên từ SomeEntity' –

0

Bạn có thể tạo thuộc tính thứ hai có tên điểm khác nhau cho cùng một cột và sử dụng tên đó trong truy vấn HQL. Nhưng có một hạn chế: chỉ một trong những thuộc tính đó có thể được ánh xạ như có thể chèn, cập nhật được.

@Column(name="name") 
private string name; 

@Column(name="name", insertable=false, updatable=false) 
private string alsoName; 
+0

Xin lỗi, tôi quên đề cập đến rằng tôi chủ yếu quan tâm đến việc đánh răng bộ sưu tập –

0

Bạn có thể sử dụng bí danh trong HQL khi bạn sử dụng trong SQL. Bạn không cần phải chỉ định bất kỳ chú thích nào cho điều đó. Chú thích có thể được thêm vào trong khi truy vấn:

SELECT id từ tên _name

2

Dựa trên sự hiểu biết của tôi về câu hỏi của bạn - Bạn có thể định nghĩa các thực thể như thế này. Điều này sẽ tạo ra một bảng Hibernate tên (NewName_ABC với một tên cột)

@Entity 
@Table(name = "NewName_ABC") 
public class ABC 
{ 
. 
@Column(name = "name") 
private string _name; 
. 
. 
} 

song song có thể sử dụng liquibase để tạo bảng.

+1

No. Xem trả lời của tôi cho http://stackoverflow.com/a/17071992/802831 –

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