powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ManyToOne
3 сообщений из 3, страница 1 из 1
ManyToOne
    #38838829
FlyHippo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можете подробно объяснить как делаются связи ManyToOne?

Если я делаю так, то ошибка, т.е. он пытается создать внешний ключ? и берет не те поля? при чем тут bytea , если я ему указываю client_id, который совместим с client_id, т.к. long

20:42:12,686 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] (MSC service thread 1-1) HHH000388: Unsuccessful: alter table db_cred.public.demand add constraint FK_2vw0pnlo54wm1d7o91s2fa279 foreign key (client) references db_cred.public.client
20:42:12,686 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] (MSC service thread 1-1) ОШИБКА: ограничение внешнего ключа "fk_2vw0pnlo54wm1d7o91s2fa279" нельзя реализовать
Подробности: Колонки ключа "client" и "id" имеют несовместимые типы: bytea и client_id.



Demand.java
.............
@Entity
@Table(name = "demand", schema = "public", catalog = "db")
public class Demand {
....................
@ManyToOne
@JoinColumn(name = "client_id", nullable = false)
private Client client;
.....................

Client.java
@Entity
@Table(name = "client", schema = "public", catalog = "db")
public class Client {
....................
@OneToMany(mappedBy = "client")
private Collection<Demand> demands = new HashSet<Demand>();
public Collection<Demand> getDemands() { return demands; }
public void setDemands(Collection<Demand> demands) { this.demands = demands;}
.....................

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE public.demand (
  id BIGSERIAL,
  client_id BIGINT NOT NULL,
  CONSTRAINT demand_pkey PRIMARY KEY(id),
  CONSTRAINT demand_fk FOREIGN KEY (client_id)
    REFERENCES public.client(id)
    ON DELETE RESTRICT
    ON UPDATE CASCADE
    NOT DEFERRABLE,
) 

CREATE TABLE public.client (
  id BIGSERIAL,
  reg_area VARCHAR(30) NOT NULL,
  CONSTRAINT client_pkey PRIMARY KEY(id)
) 





Если я указываю использовать уже созданный ForeignKey, убрав во 2 сущности OneToMany ....
@NotNull
@ManyToOne
@JoinColumn(name = "client_id", foreignKey = @ForeignKey(name = "demand_fk"))
private Client client;

то он его не использует, запрос строится только по одной таблице, таблицы заполнены, select в СУБД выполняются корректно

21:27:15,159 INFO [stdout] (default task-4) Hibernate: select demand0_.id as id1_1_, demand0_.client as client2_1_, demand0_.client_id as client_i3_1_, demand0_.d_demand as d_demand4_1_, demand0_.description as descript5_1_, demand0_.f_active as f_active6_1_, demand0_.period as period7_1_, demand0_.summa as summa8_1_ from db_cred.public.demand demand0_

версии hibernate 4.3.7, spring 4.1.2, AP - wildfly 8.2

И вообще насколько правильно использовать имеющиеся fk в базе, или обязательно объявлять в одной сущности @ManyToOne, в другой @OneToMany чтобы создался свой fk?
...
Рейтинг: 0 / 0
ManyToOne
    #38842359
eml78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не указали СУБД.
Таблицы видимо сами создаете?
Если да, то обратите внимание, что тип id в таблице client BIGSERIAL, а тип колонки client_id в таблице demand BIGINT - т.е. это не совсем один и тот же тип - возможно hibernate или СУБД считают их разными?
Как вариант, пусть hibernate сам создаст сруктуру БД (в чистой базе) - тогда можно будет сравнить то что создает hibernate с тем что создали вы - возможно это прояснит ситуацию.
...
Рейтинг: 0 / 0
ManyToOne
    #38842660
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе должно работать, попробуйте id в таблице Client сделать BIGINT, @Id в ентити проставлены?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ManyToOne
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]