Неверное отображение в спящих аннотациях - PullRequest
0 голосов
/ 06 февраля 2012

Я получаю эту ошибку, когда пытаюсь соединить две таблицы с помощью множества методов: ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] Неудачно: изменить таблицу PARAM_TRENDVALUE добавить ограничение FK_TrendValue внешний ключ (AreaID, PcID, DeviceID, ValueIDM) ссылается на нас8

Обычно hibernate пытается сопоставить неправильные столбцы.

Param.java:

Это ключ:

@EmbeddedId
@AttributeOverrides( {
        @AttributeOverride(name = "pcId", column = @Column(name = "PcID", nullable = false)),
        @AttributeOverride(name = "unitId", column = @Column(name = "UnitID", nullable = false)),
        @AttributeOverride(name = "paramId", column = @Column(name = "ParamID", nullable = false)) })
public ParamId getId() {
    return this.id;
}

Это отображение:

/**
 * @return the connection
 */
@ManyToMany
@ForeignKey(name = "FK_Param")
@JoinTable(
        name="PARAM_TRENDVALUE",
        inverseJoinColumns={    
                @JoinColumn(name = "PcID", referencedColumnName = "PcID"),
                @JoinColumn(name = "AreaID", referencedColumnName = "AreaID"),
                @JoinColumn(name = "DeviceID", referencedColumnName = "DeviceID"),
                @JoinColumn(name = "ValueID", referencedColumnName = "ValueID")
        }
)
public List<TrendValue> getTrendValues() {
    return trendValues; 
}

Trendvalue.java:

Это ключ:

@EmbeddedId
@AttributeOverrides( {
        @AttributeOverride(name = "pcId", column = @Column(name = "PcID", nullable = false)),   
        @AttributeOverride(name = "areaId", column = @Column(name = "AreaID", nullable = false)),
        @AttributeOverride(name = "deviceId", column = @Column(name = "DeviceID", nullable = false)),
        @AttributeOverride(name = "valueId", column = @Column(name = "ValueID", nullable = false))
         })
public TrendValueId getId() {
    return this.id;
}

Это отображение:

/**
 * @return the params
 */
@ManyToMany(
        mappedBy="trendValues",
        targetEntity=Param.class
    )
@ForeignKey(name = "FK_TrendValue")
public List<Param> getParams() {
    return params;
}

It´s первое множество, которое я пытаюсь использовать, и оно должно работать, я уже пробовал без обратных столбцов, с joincolumns, точно определяя таблицы и типы данных в "joincolumns / inversejoincolu"мнс ", ... Не знаю, в чем еще может быть проблема.

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

В документации написано:

Вы можете переопределить имя ограничения, используя @ForeignKey. Обратите внимание, что эта аннотация должна быть размещена на стороне владельца отношение, обратное имя, ссылающееся на ограничение другой стороны.

@Entity
public class Woman {
    ...
    @ManyToMany(cascade = {CascadeType.ALL})
    @ForeignKey(name = "TO_WOMAN_FK", inverseName = "TO_MAN_FK")
    public Set<Man> getMens() {
        return mens;
    }
}
0 голосов
/ 06 февраля 2012

Это не так, как должно работать, но это сработало: я добавил таблицу соединений вручную, оба внешних ключа тоже, но, как показано на рисунке, я тоже сохранил этот точный порядок ключей!Это не тот порядок, который показан в основной таблице TrendValues, но кажется, что это какой-то случайный порядок ... enter image description here

Если кто-то знает, почему этот порядок должен быть таким, и как яЯ могу быть очень благодарен.

Кроме того, теперь я могу запустить программу с моими аннотациями, но таблицы больше не меняются.

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