使用JPA工具进行对象关系映射:从实体生成表格功能

时间:2011-04-06 13:18:56

标签: java sql orm jpa java-ee

当我在eclipse中使用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 个答案:

答案 0 :(得分:1)

我相信,行

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

给你带来麻烦。因为您在Offer表中确实没有列OFFER_ID。

要解决此问题,请在您的商品实体中添加一个ID字段:

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

我的语法可能有问题......

答案 1 :(得分:0)

你可能需要在persistence.xml中使用<property name="hibernate.hbm2ddl.auto" value="update"/>