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

Hibernate模式验证错误的列,但使用普通int

宦树
2023-03-14

使用hibernate时,我陷入了模式验证问题。错误很简单,它说我的代码中预期的列类型和实际找到的列类型不匹配。

但据我所知,他们确实匹配。在看了类似的问题后,我添加了columnDefinition=“int(10)”,但这没有帮助。如果您能提供任何帮助或指点,我们将不胜感激。

类定义和变量声明

Traject类

public class Traject implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id", columnDefinition="int(10)")
private int id;

@OneToMany (fetch = FetchType.EAGER, mappedBy = "traject")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "toets_bij_traject")
@JsonBackReference
@OrderBy("toetsInSerie ASC")
private Set<ToetsBijTraject> toetsenBijTraject;

other vars and methods not shown

Toetsbijtrajet类

@Entity
@Table(name = "tt_traject_ref_toets")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="")
public class ToetsBijTraject implements Serializable, Comparable<ToetsBijTraject> {

@Id
@Column(name = "traject_id")
private Traject traject;

@Id
@Column(name = "toets_id")
private Toets toets;

other vars and methods not shown

表traject

CREATE TABLE `traject` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `naam` varchar(20) NOT NULL,
  `is_actief` tinyint(1) DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `naam` (`naam`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

CREATE TABLE `tt_traject_ref_toets` (
`traject_id` int(10) unsigned NOT NULL,
`toets_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`traject_id`,`toets_id`),
KEY `toets_id` (`toets_id`),
CONSTRAINT `tt_traject_ref_toets_ibfk_1` FOREIGN KEY (`traject_id`)REFERENCES `traject` (`id`),
CONSTRAINT `tt_traject_ref_toets_ibfk_2` FOREIGN KEY (`toets_id`) 
REFERENCES `ref_toets` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

错误消息:

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [traject_id] in table [tt_traject_ref_toets]; found [int (Types#INTEGER)], but expecting [tinyblob (Types#VARBINARY)]
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateColumnType(SchemaValidatorImpl.java:105)
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:92)
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.doValidation(SchemaValidatorImpl.java:50)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:91)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:484)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
... 87 more

共有2个答案

秦俊
2023-03-14

不理解为什么需要显式的int类型。我的建议是删除它,让Hibernate通过设置Hibernate来生成表。hbm2ddl。自动=创建或更新。

另请参见:https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch03.html

云浩然
2023-03-14

Hibernate不是在抱怨Traject,而是在抱怨tt\u Traject\u ref\u toets

<代码>表[tt\u traject\u ref\u toets]中的[traject\u id]列中遇到错误的列类型

这是一个映射错误:

toetsbijtrajet正在映射一个关联表。您可以使用@ManyToMany映射(仅在只有id列的情况下),也可以将映射更改为

@Entity
@Table(name = "tt_traject_ref_toets")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="")
public class ToetsBijTraject implements Serializable, Comparable<ToetsBijTraject> {

@Id
@Column(name = "traject_id")
private int trajectId;

@Id
@Column(name = "toets_id")
private int toetsId;

@ManyToOne
@MapsId("trajectId")
private Traject traject;

@ManyToOne
@MapsId("toetsId")
private Toets toets;

MapsId告诉hibernate这些是pk/fk,它与声明@JoinColumn(“trajectId”,insertable=false,updateable=false)相同

你可以在这里找到一些好的解释

https://vladmihalcea.com/the-best-way-to-map-a-many-to-many-association-with-extra-columns-when-using-jpa-and-hibernate/

您也不需要列定义

 类似资料:
  • 我在验证JSON时遇到了一些错误。我无法理解这些错误,有人能帮我解释一下吗。 } 这是json。 消息:JSON与“anyOf”中的任何模式都不匹配。架构路径: 消息:无效类型。应为数组,但得到的是字符串。架构路径: 消息:值“标识”载体“未在枚举中定义。架构路径: 消息:字符串“uui # abb 0 ef 56-8562-4056-aa62-AFB 758 a 150 ad”未根据格式“uri

  • 我在应用程序部署期间进行Hibernate验证时遇到了一些问题。我有两个类,Frame和FrameReleasePlan,它们在OneToOne关系中关联。在数据库端,关系是单向的。frame_release_planss表有一个NUMERIC(19,0)类型的“frame_id”列,它是一个指向frame表“id”列的外键。当我尝试部署时,模式验证失败并出现错误: 无法生成Hibernate S

  • 基于php-fpm来运行swoole/framework的MVC程序,这是传统的LAMP模式。 Nginx配置 server { listen 80; root /home/htf/workspace/php/swoole.com; index index.php index.html; server_name local.swoole

  • 尝试使用@SpringBootTest注释来运行单元测试时,我从Hibernate得到了这个错误。我能在网上找到的所有信息都说要将“hibernate.id.new_generator_mappings”设置为false,但这并不能解决我的问题。 2017-11-17 13:20:28.885警告11396--[main]O.s.w.cs.GenericWebApplicationContext:

  • 我实际上是在努力做下面的事情:我的服务类 这让我想要的没有被调用,实际上与这个模拟没有任何交互。你知道我做错了什么吗??

  • 问题内容: 我正在使用jdo并使用jdoconfig.xml配置持久性管理器 但是,到处都有关于jdoconfig.xml的文档,但都指出应使用http://java.sun.com/xml/ns/jdo/jdoconfig进行验证。 该网址指向一个不存在的文件,我的xml验证程序报告了一个错误。甚至使用它的目的是什么,我们能否相信URL不会改变并且我们所有的xml文件突然停止验证? 有人知道新网