Hibernate не создает таблицу соединений самостоятельноJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Hibernate не создает таблицу соединений самостоятельно

Сообщение Anonymous »

Я хочу установить связь «многие ко многим» между моими объектами.
Я хочу, чтобы спящий режим автоматически генерировал эту таблицу, но этого не произойдет.
Вот мои объекты:

DrugsEntity:

Код: Выделить всё

@Entity
@Table(name = "drugs", schema = "meds", catalog = "chinamed")
public class DrugsEntity {
@Id
@Basic
@Column(name = "id")
private int id;
@Basic
@Column(name = "name_eng")
private String nameEng;

@ManyToMany()
@JoinTable(name = "drug_symptom",
joinColumns = { @JoinColumn(name = "drug_id",nullable = false) },
inverseJoinColumns = { @JoinColumn(name = "symptom_id", nullable = false) })
private Set symptoms;
}
SymptomsEntity:[/b]

Код: Выделить всё

@Entity
@Table(name = "symptom",schema = "meds", catalog = "chinamed")
public class SymptomEntity {

@Id
@GeneratedValue
int id;

@Basic
String name;

@Column
@ManyToMany(mappedBy = "symptoms",cascade = CascadeType.ALL)
Set drugs;
}
Некоторые настройки:

Код: Выделить всё

jpa:
hibernate:
ddl-auto: update
show-sql: true
Таким образом, я могу видеть запросы SQL в спящем режиме:

Код: Выделить всё

Hibernate: create table meds.diseases (disease_id int4 not null, drug_id int4, name varchar(255), primary key (disease_id))
Hibernate: create table meds.drugs (id int4 not null, action_pharm varchar(255), action_tkm varchar(255), clinic varchar(255), contraindications varchar(255), form varchar(255), maker varchar(255), name_eng varchar(255), name_ru varchar(255), taking_method varchar(255), primary key (id))
Hibernate: create table meds.herbal_drug (herbal_id int4 not null, drug_id int4, primary key (herbal_id))
Hibernate: create table meds.pattern_drug (pattern_id int4 not null, drug_id int4, primary key (pattern_id))
Hibernate: create table meds.symptom (id int4 not null, name varchar(255), primary key (id))
Hibernate: alter table if exists symptom_drug add constraint FKl7jx9kgpfiunb1r5neejqi1in foreign key (drug_id) references meds.symptom
Hibernate: alter table if exists symptom_drug add constraint FKimmnf4263cgg3yg46i90tkn1g foreign key (symptom_id) references meds.drugs
Hibernate: alter table if exists symptom_drugs add constraint FKnvs2tystmth11i573t29rtayk foreign key (drugs_id) references meds.drugs
Hibernate: alter table if exists symptom_drugs add constraint FKng4i6ig5nr2laew225ttfnrb9 foreign key (symptom_entity_id) references meds.symptom
Насколько я понимаю, спящий режим даже не пытается создать эту таблицу.

Код: Выделить всё

Using dialect: org.hibernate.dialect.PostgreSQL10Dialect
Как добиться того, чтобы спящий режим создал эту таблицу самостоятельно?

P.S: уже смотрел эту ссылку. Hibernate не делает этого. не создаю таблицу соединений. Но я полагаю, это не мой случай.

РЕШЕНО:
Проблема заключалась в том, что эта таблица уже был упакован. И я, вероятно, мог заметить что-то интересное в запросах спящего режима: перед именем таблицы Drug_symptom не было префикса "meds".
Поэтому была создана таблица в "публичной" схеме базы данных.
Решено это таким образом: добавлено default_schema

Код: Выделить всё

spring:
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
default_schema: meds
Но я также мог бы использовать параметр «схема» в аннотации @JoinTable.

Подробнее здесь: https://stackoverflow.com/questions/610 ... on-his-own
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»