当我在eclipse中使用JPA功能“从实体生成表”时,我遇到了问题。 我设法为我的项目做了所有的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
在课程专刊中,我将课程提供的关系粘贴到另一个名为优惠券的课程中,因为您看到它与提供应该与课程评论的课程完全相同。
那么问题是什么?
为什么一个关系被映射而其他关系没有?
为什么数据库COMMENT中新创建的表没有名为OFFER_ID的列?
我该如何解决?
答案 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"/>