我有一个非常简单的对象结构,它给了我一个无法解决的错误。我已经做了一堆搜索,我认为这一定是一个相当常见的用例,所以不确定问题是什么。我有这三个类:
@Entity
public class Widget {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idd;
private Date date;
private String type;
private int ownerId;
@OneToOne(cascade = CascadeType.ALL)
private Rating rating;
@OneToMany(cascade = CascadeType.ALL)
private List<Tag> tagList;
}
@Entity
public class Rating {
public enum ChartType {RADAR, BAR, LINE, STAR};
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int ratingId;
private String name;
@Enumerated(EnumType.STRING)
private ChartType chartType;
private double normalizedValue;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<RatingComponent> componentList = new ArrayList<>();
public Rating() {
buildNormalizedValue();
}
}
@Entity
public class RatingComponent {
@Id
@GeneratedValue()
private int compId;
private String name;
private double value;
private double maxValue;
}
当保存在DAO中时,我得到了我不太理解的错误,例如
2018-07-23 11:43:07,208 WARN o.h.t.s.i.ExceptionHandlerLoggedImpl [main] GenerationTarget encountered exception accepting command :
Error executing DDL "alter table Rating_RatingComponent drop foreign key FKaudjguwlo1i8tm2jgli5bbnq6" via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table Rating_RatingComponent drop foreign key FKaudjguwlo1i8tm2jgli5bbnq6" via JDBC Statement
上越
2018-07-23 11:43:07,644 WARN o.h.t.s.i.ExceptionHandlerLoggedImpl [main] GenerationTarget encountered exception accepting command : Error executing DDL "create table RatingComponent (compId integer not null, maxValue double precision not null, name varchar(255), value double precision not null, primary key (compId)) engine=InnoDB" via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table RatingComponent (compId integer not null, maxValue double precision not null, name varchar(255), value double precision not null, primary key (compId)) engine=InnoDB" via JDBC Statement
我的配置中有这些属性
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
我认为我已经仔细地阅读了文档,并且认为这是一个非常直接的对象设计......关于如何解决的任何想法,以及我应该在文档中的哪里更仔细地研究以了解根本原因?
谢谢!2谢谢!
5条答案
按热度按时间7gcisfzg1#
我使用了SQL保留字
'order'
作为实体名称,因此我得到了类似的错误。重命名它为我解决了它。看看你的实体名称,你有没有在其中使用任何保留字?tktrz96b2#
更换
通过
将做的伎俩
ttvkxqim3#
我不得不删除创建所有的表,使其工作。还要检查是否使用任何保留字作为表名。
j1dl9f464#
我在
@OneToMany
关系中遇到了这个错误,选项是orphanRemoval = true
。实际上,从JPA文档中可以看到:是否将移除操作应用于已从关系中移除的实体,以及是否将移除操作级联到这些实体。
所以,如果你创建了一个表A,填充它,然后你想创建一个表B(当然,一开始是空的),用一个外键到表A,那么你会得到“alter table xxx drop foreign key”错误。
正在从以下位置删除属性:
收件人:
ac1kyiln5#
在我的例子中,DB用户没有足够的权限使用reference命令修改表。提示堆栈跟踪有如下错误
原因:java.sql.SQLSyntaxErrorException:REFERENCES命令拒绝用户
更新数据库用户权限修复了该问题
也将更新作为ddl-auto使用
jpa:hibernate:ddl-auto:更新