java Hibernate 中的表实体类 与 表字段的配置必须一样么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Hibernate 中的表实体类 与 表字段的配置必须一样么?相关的知识,希望对你有一定的参考价值。

EmergencyTailor.java EmergencyTailor.hbm.xml 这两个文件. 前者是我的实体类,也就是我们常说的Bean. 第二个文件是 这个实体类所对应的配置文件. 相信懂Hibernate 的朋友都知道这个.   我的疑问是 这个 实体类中的属性 是必须跟这个配置文件中的字段一模一样么?  因为我这儿在有点特殊情况需要在Bean里面添字段,以供程序中使用.当然.这个字段的值是不会入库的...   

必须一样的,否则当使用Hibernate向数据库中添加数据时会出错的,因为实体中的字段和数据表中字段不一样。楼主可以定义一个新的实体,该实体的属性包含EmergencyTailor和其他的字段 参考技术A 必须一样

hibernate 不会创建所有关联的表

【中文标题】hibernate 不会创建所有关联的表【英文标题】:hibernate doesn't create all the associated tables 【发布时间】:2017-08-21 21:49:11 【问题描述】:

我有三个实体类。并且通过使用spring boot,我正在尝试创建所有这三个表。但它只创建了三个表中的一个。

我的所有三个班级都是:-

Users.java

@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--------------------------------

UserRole.java

@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==============================

Role.java

@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 目标执行模式管理 [create table user_role (user_role_id numeric(19,0) identity not null, role_id numeric(19,0), user_id numeric(19,0),主键(user_role_id))]

原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你的SQL语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的“identity not null, role_id numeric(19,0), user_id numeric(19,0), primary key (us') 附近使用

【问题讨论】:

【参考方案1】:

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

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

在您的 application.properties 中:

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

spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect

【讨论】:

我把所有的@GeneratedValue 改成 Auto 还是一样的错误 非常感谢。我实际上在 application.properties 中缺少 MySQL5InnoDBDialect。 @sagarlimbu 太棒了!如果您发现对问题有用的答案,最好将其标记为已批准。

以上是关于java Hibernate 中的表实体类 与 表字段的配置必须一样么?的主要内容,如果未能解决你的问题,请参考以下文章

java中的实体类一定要与数据库表结构相一致吗?

hibernate映射postgreSQL数据库中的表时,表名是大写的时候为啥hibernate不能映射实体

关于hibernate注解方式的实体类映射

如何根据数据库中的表自动生成实体类

hibernate 不会创建所有关联的表

Java Spring Hibernate没有根据我的实体创建表[重复]