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

tôi đang cố gắng tạo hai bảng khác nhau ánh xạ nhiều phần trong một cột duy nhất cho một lớp thực thể

Tôi nghĩ những gì bạn đang tìm kiếm được giải thích trong Hibernate ORM phần về @Any chú thích :

@Any(metaColumn = @Column(name = "userType"))
@AnyMetaDef(name = "PropertyMetaDef", metaType = "string", idType = "long",
            metaValues = {
                    @MetaValue(value = "User", targetEntity = User.class),
                    @MetaValue(value = "LDAP", targetEntity = LDAPUser.class)
            }
    )
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)   
private Object assignedTo

Nhưng nó sẽ không tạo ra bất kỳ khóa ngoại nào.

Ngoài ra, nếu hai lớp có thể mở rộng từ một siêu lớp chung, bạn có thể sử dụng Ánh xạ kế thừa để đạt được điều gì đó tương tự.

Ví dụ:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public static class UserEntity {

    @Id
    private Long id;

    ...
}

@Entity
public class User extends UserEntity {
...
}

@Entity
public class LDAPUser extends UserEntity {
...
}

và sau đó

      @ManyToOne
      @JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)   
      private UserEntity assignedto;

Điều này sẽ tạo ra ba bảng. Bảng UserEntity sẽ có một khóa ngoại trên assignedto_id cột. User id và LDAPUser mỗi id sẽ có một ràng buộc trên UserEntity Tôi. Về cơ bản, tiến gần đến những gì bạn đã hỏi ban đầu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật dữ liệu vào bảng từ trường đầu vào được tạo động

  2. Sử dụng lại Truy vấn con từ Biểu thức Chọn trong Mệnh đề WHERE

  3. Cách lấy dữ liệu bằng số 0 một cách hùng hồn

  4. Bảng cơ sở dữ liệu, một bảng tham chiếu đến nhiều bảng không liên quan

  5. tìm nạp dữ liệu từ cơ sở dữ liệu mysql trên cơ sở các loại nghỉ phép như Thi, Không lương, Hàng năm