当前位置: 首页 > 知识库问答 >
问题:

hibernate不会创建所有相关联的表

陆弘光
2023-03-14
@Entity
@Table(name = "users")
public class Users {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id", nullable = false, updatable = false)
private long id;
private String username;
private String password;
private String firstName;
private String lastName;

@Column(name="email", nullable = false, updatable = false)
private String email;
private String phone;
private boolean enabled=true;

@OneToMany(mappedBy = "users", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JsonIgnore
private Set<UserRole> userRoles = new HashSet<>();

---------------------getter setters--------------------------------
}
@Entity
@Table(name="user_role")
public class UserRole {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long userRoleId;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="user_id")
private Users users;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="role_id")
private Role role;

===============getter setters==============================
}
@Entity
@Table(name="user_role")
public class UserRole {

@Id
private long roleId;
private String name;

@OneToMany(mappedBy = "role", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private Set<UserRole> userRoles = new HashSet<>();

==============getter setters ====================

我希望hibernate创建三个表,但在我的情况下,只创建了一个表角色,我得到了如下错误

原因:org.hibernate.tool.schema.spi.schemaManagementException:无法对JDBC目标执行模式管理[创建表user_role(user_role_id numeric(19,0)标识not null,role_id numeric(19,0),user_id numeric(19,0),主键(user_role_id))]

由:com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception引起:您的SQL语法中有一个错误;请查看与您的MySQL server版本相对应的手册,以便在第1行“Identity not null,role_id numeric(19,0),user_id numeric(19,0),primary key(US)”附近使用正确的语法

共有1个答案

易修洁
2023-03-14

该错误表示您试图在MySQL数据库引擎中使用“Identity NOT null”,这是无效的。IDENTITY是SQL SERVER关键字。

确保已经为数据库引擎正确配置了Hibernate。您应该使用mysqldeagence。

在Application.Properties中:

spring.jpa.database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect
 类似资料:
  • 问题内容: 为什么在我的某些模型中序列化不会为 Foreignkey 创建新列?但是它确实为其他模型创建了??? 令人沮丧和奇怪。例如,在此用户模型中,不会创建sequelize 。 这是一个类似的问题:不会创建模型关联列但不能创建!没有回答。 我已经花了几个小时,我做了所有类似的事情: 仔细阅读以下内容:https : //sequelize.org/master/manual/assocs.h

  • 问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 7年前关闭。 我有带有Hibernate和Spring框架的Maven项目。我希望Hibernate自动创建表,但是只是删除所有现有表,并且不创建所需的表。在会话工厂初始化期间不会引发任何异常,但是当我

  • 问题内容: 有什么办法可以使两个表之间没有直接关系但又在hibernate中有两个公共字段呢? 我有两个表,称为boiler_plates和profile,它们之间没有直接关系,但是有一个名为contract_id的公共字段。 我写了查询“来自bp.bt_contracts = p.contract_id上的Boiler_Plates bp内部连接配置文件p”,但它不断抛出错误。“意外令牌:在第1

  • 我有两张桌子: 基本上,我想通过id字段定义一个从到的外键,这两个表中的字段是相同的。问题是,当我在IntelliJ Idea中检查数据库时,我在Keys部分没有看到任何外键(检查了两个表),只有它们的PK。这段代码有问题吗?我已经按照另一个类似问题中的建议设置了属性:

  • 我有以下问题: 有人对此有解释吗?我考虑从我的业务服务中的hibernate会话中重新加载对象,并从Struts HTTP会话中复制实体对象中的数据。 Hibernate映射

  • null 对于我的数据,我有时会遇到这样的问题:A有一组不同的B对象,而这些B对象引用同一个C对象。 当我调用时,我会得到一个hibernate错误:。我知道hibernate不能在同一个会话中插入/更新/删除同一个对象两次,但是有什么方法可以解决这个问题吗?这似乎并不是一种罕见的情况。 在我研究这个问题的过程中,我看到有人建议使用,但当我这样做时,任何“冲突”对象都会作为所有值都设置为null的