Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099

[Hibernate] A Foreign key has the wrong number of column. should be 0

08.03.2017, 10:11. Показов 7234. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ошибка: Initial SessionFactory creation failed.org.hibernate.AnnotationException : A Foreign key refering com.artmal.model.Teacher from com.artmal.model.Problem has the wrong number of column. should be 0

Entity: User
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;
 
    @Column(name = "email")
    private String email;
 
    @Column(name = "full_name")
    private String fullName;
 
    @Column(name = "username")
    private String username;
 
    @Column(name = "password")
    private String password;
 
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles = new HashSet<>();
 
    // constructor & getters-setters
}
Entity: Teacher
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Entity
@Table(name = "teachers")
public class Teacher {
    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    @OneToOne
    @JoinColumn(name = "id")
    private User user;
 
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "teacher")
    private Set<Subject> subjects = new HashSet<>();
 
    @OneToMany(mappedBy = "teacher")
    private Set<Student> students = new HashSet<>();
 
    @OneToMany(mappedBy = "teacher")
    private Set<Problem> problems = new HashSet<>();
 
    // constructor & getters-setters
}
Entity: Problem
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@Entity
@Table(name = "problems")
public class Problem {
    @Id @GeneratedValue
    @Column(name = "id")
    private int id;
 
    @ManyToOne
    @JoinColumn(name = "teacher_id")
    private Teacher teacher;
 
    @Enumerated(EnumType.ORDINAL)
    @Column(name = "problem_status_id")
    private ProblemStatus problemStatus;
 
    @Column(name = "start_date")
    @Type(type = "date")
    private Date startDate;
 
    @Column(name = "due_date")
    @Type(type = "date")
    private Date dueDate;
 
    @Enumerated(EnumType.ORDINAL)
    @Column(name = "complexity_status_id")
    private ProblemComplexity problemComplexity;
 
    @Column(name = "subject")
    private String subject;
 
    @Column(name = "title")
    private String title;
 
    @Column(name = "description")
    private String description;
 
    @Column(name = "customer_info")
    private String customerInfo;
 
    @Column(name = "payment_in_dollars")
    private int paymentInDollars;
 
    // constructor & getters-setters
}


Смотрел в интернете решение, но там у всех проблема с композитными ключами(should be 2). Я же подозреваю, что неправильно замапил PK в классе Teacher.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2017, 10:11
Ответы с готовыми решениями:

JPA/Hibernate MappingException: Foreign key must have same number
Вот описание ошибки. org.hibernate.MappingException: Foreign key (FK_n9nvapt8aqpregmwepb98hjed:questions )) must have same number of...

Hibernate + Cannot add or update a child row: a foreign key constraint fails
Есть вот такая схема: Соответственно два класса: @Entity @Table(name = &quot;item_orders&quot;) public class ItemOrders implements...

Зачем нужны primary key и foreign key?
Пожалуйста, объясните самым простым языком зачем эти ключи нужны? Какова их функция? Как они работают? В чём приемущество?

4
 Аватар для Borsche
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
08.03.2017, 11:10
А как это ты так в teacher поле user как id отметил. Это же класс. Если ты хочешь класс как id то класс отмечаешь как @Embeddable а в teacher его как @EmbeddedId.

Добавлено через 6 минут
Хотя даже не так. Не до конца понимаю что тут за происходит) Я походу неправильно сразу понял. В teacher зделай отдельное поле id.
1
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
08.03.2017, 11:53  [ТС]
Цитата Сообщение от Borsche Посмотреть сообщение
А как это ты так в teacher поле user как id отметил. Это же класс.
Ну, я думал так. При использовании FK в связках мы всегда указываем сущность, на поле которой мы будем ссылаться. То есть, id в Teacher, по идее, должен ссылаться на id в User. Вот, например, в Problem есть следующий маппинг
Java
1
2
3
    @ManyToOne
    @JoinColumn(name = "teacher_id")
    private Teacher teacher;
В Teacher, соотвественно:
Java
1
2
    @OneToMany(mappedBy = "teacher")
    private Set<Problem> problems = new HashSet<>();
То есть, в первом листинге будет браться поле id(т.к оно PK).

Думал что таким же макаром, возьметься PK сущности User.

Про отдельное id-поле не понял, как он будет все же ссылаться на id User'a?
0
 Аватар для Borsche
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
08.03.2017, 12:07
Лучший ответ Сообщение было отмечено Artmal как решение

Решение

Ну если тебе так нужно то это называеться вроде sharedprimarykey в JPA. но в книге говорят что это плохой вариант.
1
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
09.03.2017, 07:56  [ТС]
Так как правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2017, 07:56
Помогаю со студенческими работами здесь

#1170 - BLOB/TEXT column 'id' used in key specification without a key length
После выполнения этого кода: CREATE TABLE forum_themes( id TINYTEXT, name TINYINT, autor_name TINYTEXT, create_date DATETIME...

Wrong Number of parametrs
Снова прошу вашей помощи. Вот сижу с этой прогой уже много времени, и просто глаза и мозг зависли конкретно. Итак, где я облажалась?? ...

Wrong number of input arguments
Error using dcgain (line 38) Wrong number of input arguments. Error in KP (line 101) Kp11=dcgain(Wfe*Mn)*K_rm Код: %...

ArgumentError: wrong number of arguments ?!
class Fectory attr_accessor :name, :atrrs def new (name, *atrrs) @name = &quot;#{name}&quot; @atrrs = klass =...

Как одной строкой запроса добавить один и тот же сгенерированный UUID в поле Key таблицы1 и в поле Foreign Key таблицы2 ?
У меня получается добавить одним запросом один и тот же UUID в две таблицы. Как одной строкой запроса добавить один и тот же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru