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

Giải thích các hành vi trong ánh xạ chuỗi id hỗn hợp tăng dần tự động với Hibernate

Kể từ id trường đã là duy nhất và tự động tăng lên, bạn không cần id tổng hợp trong trường hợp này để thực thể của bạn có thể trông giống như sau:

@Id
@Column(name = "id")
public long getId() {
    return id;
}

@Column(name = "subid")
public int getSubid() {
    return subid;
}

Thực thể có thể được tìm nạp bằng id sử dụng trình quản lý thực thể:

entityManager.find(MyEntity.class, entityId); 

hoặc bạn có thể tìm nạp thực thể bằng cách sử dụng truy vấn có cả idsubid :

MyEntity myEntity = entityManager.createTypeQuery("select me from MyEntity where id = :id and subid = :subid", MyEntity.class)
    .setParameter("id", entityId) 
    .setParameter("subid", entitySubId) 
    .getSingleResult();

Hibernate cũng có SelectGenerator có thể tìm nạp id từ cột cơ sở dữ liệu, rất hữu ích khi cơ sở dữ liệu tạo id bằng cách sử dụng trình kích hoạt.

Thật không may, nó không hoạt động với id tổng hợp, vì vậy bạn đã viết SelectGenerator mở rộng của riêng mình hoặc sử dụng một chuỗi duy nhất id_sub_id cột kết hợp id và id phụ thành một cột VARCHAR duy nhất:

'1-0'
'1-1'
'2-0'
'2-1' 

Bạn phải viết một trình kích hoạt cơ sở dữ liệu để cập nhật hai cột bằng cách sử dụng một thủ tục được lưu trữ dành riêng cho cơ sở dữ liệu và tổng hợp hai cột thành một VARCHAR. Sau đó, bạn ánh xạ cột tổng hợp bằng cách sử dụng SelectGenerator chuẩn vào trường Chuỗi:

@Id
@Column(name = "id_sub_id")
@GeneratedValue( strategy = "trigger" )
@GenericGenerator( 
    name="trigger", strategy="org.hibernate.id.SelectGenerator",
    parameters = {
        @Parameter( name="keys", value="id_sub_id" )
    }
)
public String getId() {
    return id;
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP float / double được lưu trữ dưới dạng MySQL DECIMAL

  2. Làm cách nào để sử dụng LOAD_FILE để tải tệp vào MySQL blob?

  3. Python:Chuyển đổi tuple thành Chuỗi được phân tách bằng dấu phẩy

  4. SQL injection không hoạt động chính xác

  5. mysql GROUP_CONCAT DISTINCT nhiều cột