#java #sql #orm #jpa #jakarta-ee
#java #sql #orm #jpa #джакарта-ee
Вопрос:
У меня возникает проблема, когда я использую функцию JPA «Генерировать таблицы из сущностей» в eclipse. Мне удалось выполнить все мои сопоставления ORM для моего проекта, но есть только одно, которое вызывает у меня проблемы.
В консоли указано следующее:
Внутреннее исключение: java.sql.SQLSyntaxErrorException: ‘OFFER_ID’ не является столбцом в таблице или VTI ‘COMMENT’. Код ошибки: -1
Это изображение того, как должны выглядеть таблицы:
-К одному предложению есть много комментариев
-Один комментарий принадлежит одному предложению …
Вот как выглядят объекты: комментарий к объекту:
@Entity
public class Comment {
// Attributes
@Id
@GeneratedValue
@Column(nullable = false)
private Long id;
...
@ManyToOne
@JoinColumn(name = "OFFER_ID", nullable = false)
private Offer offer;// One comment must belong to one offer
...Getters and setters
Предложение объектов:
@Entity
public class Offer {
//...Other attributes
@OneToMany(mappedBy = "offer")
private List<Coupon> coupons;//One offer can have many coupons
@OneToMany(mappedBy = "offer")
private List<Comment> comments; //One offer can have many comments
... getters and setters
В класс Offer я специально вставил связь, которую класс offer имеет с другим классом, называемым coupons, как вы видите, она точно такая же, как та, которую должно иметь предложение с классом Comment .
Так в чем проблема?
Почему одно отношение сопоставляется, а другое нет?
Почему в новой созданной таблице в КОММЕНТАРИИ к базе данных нет столбца с именем OFFER_ID?
Как я могу это исправить?
Ответ №1:
Я полагаю, что линия
@JoinColumn(name = "OFFER_ID", nullable = false)
вызывает у вас проблемы. Потому что у вас действительно нет столбца OFFER_ID в таблице предложений.
Чтобы исправить это, добавьте поле идентификатора в свой объект предложения:
@Id(columnName = "OFFER_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
Возможно, я ошибаюсь с синтаксисом…
Ответ №2:
Может быть, вам нужно <property name="hibernate.hbm2ddl.auto" value="update"/>
в persistence.xml