Первичный ключ Hibernate Composite содержит внешний ключ, который является подмножеством первичного ключа других таблиц. Как сопоставить? - PullRequest
1 голос
/ 02 июня 2011

Сценарий выглядит следующим образом

Таблица А имеет составной ПК.

Table A <br>-------- <br> a1 (pk)<br> a2 (pk)<br> a3 (pk)<br> foo<br> bar<br> LastUpdateDate<br> LastUpdateUser
======== 

Таблица B также имеет составной PK, который на самом деле является подмножеством PK A, здесь также работает как FK. Нет принудительного ограничения FK.

Table B <br>-------- 
 a1 (fk,pk) 
 a2 (fk,pk) 
 foo
 bar 
 LastUpdateDate
 LastUpdateUser
======== 

Я пробовал несколько способов, и ни один из них не работает. Кто-нибудь может рассказать о работающем картографическом решении Hibernate? лучше в стиле аннотации.

Большое спасибо.

Viv

1 Ответ

0 голосов
/ 02 июня 2011

Я вижу следующие настройки. Хотя это может быть сложно получить работу и, исходя из моего опыта, это ненужная сложность.

class A implements Serializable {
   @Id
   private PK id = new PK();
   @Embeddable      
    public static final class PK implements Serializable {
        @ManyToOne 
        @JoinColumns ({
        @JoinColumn(name="A1_COL", referencedColumnName = "id.a1"),
        @JoinColumn(name="A2_COL", referencedColumnName = "id.a2"),

        })
         B b;            
        @Basic String a3;
    }    
 }


class B implements Serializable {
   @Id
   private PK id = new PK();
   @Embeddable      
    public static final class PK implements Serializable {                    
        @Basic String a1;
        @Basic String a2;
        @Basic String a3;
    }    
 }

Вы должны быть в состоянии получить доступ через

a.getId().getB()

При необходимости добавлять сеттеры / геттеры.

Обычно проблемы такого типа требуют много проб и ошибок, поэтому не ожидайте, что это сработает сразу. Но это должно дать вам направление для копания. После того, как вы определите окончательную конфигурацию, добавьте ее к своему вопросу, чтобы кто-то мог воспользоваться ею в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...