Реляционное сопоставление объектов с помощью JPA Tools: функция «Создание таблиц из сущностей» - PullRequest
0 голосов
/ 06 апреля 2011

У меня проблема, когда я использую функцию JPA «Создать таблицы из сущностей» в затмении.Мне удалось сделать все сопоставления ORM для моего проекта, но есть только один, который доставляет мне проблемы.

Консоль говорит следующее:

Внутреннее исключение: java.sql.SQLSyntaxErrorException: «OFFER_ID» не является столбцом в таблице или VTI «COMMENT».Код ошибки: -1

Это изображение того, как должны выглядеть таблицы:

enter image description here

- В одном предложении много комментариев

-Один комментарий принадлежит одному предложению ...

Вот как выглядят сущности: Комментарий сущности:

@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

В классе «Преднамеренно» я вставил отношение, которое классовое предложение имеет, с другим классом, называемым купонами, как вы видите, оно точно такое же, как и предложение, которое должно быть в классе «Комментарий».

Так в чем же проблема?

Почему одна связь отображается, а другая нет?

Почему новая созданная таблица в базе данных COMMENT не имеет столбца с именем OFFER_ID?

Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Полагаю, линия

@JoinColumn(name = "OFFER_ID", nullable = false)

доставляет вам неприятности. Потому что у вас действительно нет столбца OFFER_ID в таблице предложений.

Чтобы исправить это, добавьте поле id к вашей сущности предложения:

@Id(columnName = "OFFER_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

Я могу ошибаться в синтаксисе ...

0 голосов
/ 07 апреля 2011

Может быть, вам нужно <property name="hibernate.hbm2ddl.auto" value="update"/> в файле persistence.xml

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