Присоединяйтесь в Hibernate - PullRequest
       21

Присоединяйтесь в Hibernate

0 голосов
/ 09 января 2012

У меня 6 таблиц в базе: CarMaster, Audi, Toyota, Tata, Hyundai, Ford, Mapping

Таблица сопоставления имеет два столбца: mapId, tableName

Запись в таблице сопоставления будет выглядеть как «1, Audi», «2, Toyota» и т. Д. До «5, Ford»

Первичный ключ в первых пяти таблицах - carId.

Кроме того, в CarMaster есть столбец mapId, который при соединении с таблицей сопоставления даст имя таблицы. Затем его можно использовать для соединения ключа carId с соответствующей таблицей, чтобы можно было получить дополнительную информацию об автомобиле.

Например, скажем, carId равен 10 с mapId 3. mapId 3 означает Tata. Таким образом, дополнительная информация о carId 10 будет представлена ​​в таблице Tata, и поэтому CarMaster и Tata будут объединены для получения более подробной информации.

Как отобразить этот сценарий в Hibernate? Каковы будут связи между шестью таблицами?

Я перечисляю POJO ниже, чтобы кто-то мог быстро помочь мне с аннотациями ассоциации без особого набора текста.

class CarMaster implements Serializable
 {
    @Id
    @Column(name = "car_id")
    private String carId;

    @Column(name = "map_id")
    private String mapId;

    //other columns

 } 

class Audi implements Serializable
 {
    @Id
    @Column(name = "car_id")
    private String carId;

    //other columns
 } 

class Toyota implements Serializable
 {
    @Id
    @Column(name = "car_id")
    private String carId;

    //other columns
 } 

class Tata implements Serializable
 {
    @Id
    @Column(name = "car_id")
    private String carId;

    //other columns
 } 

class Hyundai implements Serializable
 {
    @Id
    @Column(name = "car_id")
    private String carId;

    //other columns
 }

class Ford implements Serializable
 {
    @Id
    @Column(name = "car_id")
    private String carId;

    //other columns
 }

class Mapping implements Serializable
 {
    @Id
    @Column(name = "map_id")
    private String mapId;

    @Column(name = "table_name")
    private String tableName;
 }

Спасибо за чтение !!

1 Ответ

0 голосов
/ 09 января 2012

Мне кажется, что у вас есть дерево наследования сущностей, использующее стратегию объединенных подклассов. Смотри http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#mapping-declaration-joinedsubclass

Единственное отличие состоит в том, что Hibernate не нуждается в дискриминаторе mapId в CarMaster, а также вообще не нуждается в таблице Mapping. Поэтому, если вам действительно нужно сохранить их в модели базы данных, сопоставьте Mapping как обычную сущность, а столбец mapId в CarMaster как ассоциацию ManyToOne с Mapping. Вам просто нужно убедиться, что каждый раз, когда вы создаете экземпляр Ford, вы инициализируете его сопоставление сопоставления с экземпляром Mapping, у которого есть имя таблицы «Ford».

...