Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Ngủ đông Lưu hành vi lạ

Vấn đề lớn nhất của bạn là cột trong <key> không chính xác ánh xạ - nó phải là "user_id", không phải "id". Điều đó nói rằng, toàn bộ bản đồ của bạn có vẻ hơi lạ đối với tôi.

Trước hết, nếu bạn muốn ID được tạo tự động, bạn thực sự nên để Hibernate xử lý việc đó bằng cách chỉ định trình tạo thích hợp:

 <id column="id" name="id">
   <generator class="native"/>
 </id>

Đọc Tài liệu Hibernate trên máy phát điện cho các tùy chọn có sẵn khác nhau.

Thứ hai, nếu tất cả những gì bạn cần là một tập hợp các loại chuỗi, hãy xem xét ánh xạ lại chúng thành một tập hợp các phần tử thay vì mối quan hệ một-nhiều:

 <set name="types" table="types">
    <key column="user_id"/>
    <element column="type" type="string"/>
 </set> 

Bằng cách đó, bạn sẽ không cần lớp hoặc ánh xạ "Loại" rõ ràng cho nó. Ngay cả khi bạn muốn có thêm thuộc tính trên "Loại", bạn vẫn có thể ánh xạ nó dưới dạng thành phần chứ không phải thực thể.

Cuối cùng, nếu "Loại" phải là một thực thể do một số yêu cầu mà bạn chưa mô tả, thì mối quan hệ giữa "Người dùng" và "Loại" là hai chiều và cần được ánh xạ như:

 <set name="types" table="types" inverse="true">
    <key column="user_id"/>
    <one-to-many class="Types"/>
 </set>

 ...
 in Types mapping:
 <many-to-one name="user" column="user_id" not-null="true"/>

Trong trường hợp sau, "Loại" sẽ phải có thuộc tính "người dùng" thuộc loại "Người dùng". Tại đây là một ví dụ chi tiết.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Một cái nhìn chuyên sâu về Lập chỉ mục cơ sở dữ liệu

  2. MySQL nối tất cả các cột

  3. lấy dữ liệu từ cơ sở dữ liệu mysql để sử dụng trong javascript

  4. Cập nhật tất cả các giá trị của một cột thành chữ thường

  5. Sử dụng phương pháp trình tạo truy vấn Laravel whereIn () với truy vấn phụ