当我在 Eclipse 中使用 JPA 功能“从实体生成表”时遇到问题。 我设法为我的项目完成所有 ORM 映射,但只有一个给我带来了麻烦。
控制台是这样说的:
Internal Exception: java.sql.SQLSyntaxErrorException: 'OFFER_ID' is not a column in table or VTI 'COMMENT'. Error Code: -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 的类的关系,正如您所看到的,它与 Offer 与 Comment 类应具有的关系完全相同。
那么问题出在哪里呢?
为什么一种关系被映射而另一种则没有?
为什么数据库中新创建的表COMMENT没有名为OFFER_ID的列?
如何修复它?
最佳答案
我相信,这条线
@JoinColumn(name = "OFFER_ID", nullable = false)
给你带来麻烦。因为 Offer 表中确实没有 OFFER_ID 列。
要解决此问题,请向您的 Offer 实体添加一个 id 字段:
@Id(columnName = "OFFER_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
我的语法可能有问题...
关于java - 使用 JPA 工具进行对象关系映射 : Generate Tables from Entities feature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567004/