2011-10-07 28 views
5

Chiến lược đặt tên của tôi ở chế độ ngủ đông là chiến lược mặc định: EJB3NamingStrategy. Vì vậy, tên trường và bảng nằm trong thư mục. Tôi chuyển nó sang ImprovedNamingStrategy để có snakecase.EJB3NamingStrategy vs ImprovedNamingStrategy Đặt tên khóa ngoài

Nhưng khóa ngoại của tôi không bao gồm tên khóa chính của thực thể được tham chiếu trong tên.

Ví dụ:

table1: id tên

Với EJB3NamingStrategy các lĩnh vực table2 sẽ là:

table2: id table1_id

nhưng với ImprovedNamingStrategy các lĩnh vực table2 sẽ : bảng2: id table1

Có cách nào để có _id với ImprovedNamingStrategy không. Tôi không hiểu tại sao hibernate lại hành xử khác nhau bởi vì phương thức logicalCollectionColumnName trong cả hai chiến lược đều giống nhau.

Trả lời

4

Mở rộngNamingStrategy cải tiến và tùy chỉnh, có thể triển khai ban đầu của ImprovedNamingStrategy đã sai và sau đó chúng không thể sửa lỗi vì nó sẽ phá vỡ tính tương thích ngược.

+0

tham số nhận được trong logicalCollectionColumnName đã chứa cột_id nếu tôi sử dụng EJB3NamingStrategy nhưng nếu tôi sử dụng ImprovedNamingStrategy thì tham số sẽ không nhận được. Tôi không hiểu tại sao. Phương thức này được gọi từ một nơi khác trong mã. – Mike

+0

Vâng viết của bạn, tôi đã không tìm đúng phương pháp. Phần id được nhận xét – Mike

3

Sự cố này được giải quyết trong khởi động mùa xuân 1.2.7.RELEASE. Tham chiếu của luồng này cũng được chỉ định trong tài liệu của gói jpa hibernate. Chữ ký của lớp như sau:

package org.springframework.boot.orm.jpa.hibernate; 

public class SpringNamingStrategy extends ImprovedNamingStrategy {} 
Các vấn đề liên quan