java - Hibernate DiscriminatorColumn.Type 不工作

标签 java hibernate discriminator

我有一个抽象类AbstractTile

@Entity
@Table(name = "TILES")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "t_type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "abstractTile")
public class AbstractTile {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
private int id;
//and so on
}

还有很多继承自AbstractTile的类

@Entity
@DiscriminatorValue(value = "dirt")
public class DirtTile extends AbstractTile{
//some code
}

@Entity
@DiscriminatorValue(value = "grass")
public class GrassTile extends AbstractTile{
//some code
}

@Entity
@DiscriminatorValue(value = "water")
public class WaterTile extends AbstractTile{
//some code
}

问题是当我想将它们保存到数据库时,出现错误

Hibernate: 
insert 
into
    TILES
    (/*some data*/, t_type) 
values
    (/*some data*/, 'dirt') 

org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Wrong value for type int : dirt

我做错了什么? DiscriminatorType 设置为 String 那么为什么它需要 int?

编辑:SQL 创建语句

CREATE TABLE tiles
(
  t_type character varying(31) NOT NULL,
  id serial NOT NULL,
  isaccesible boolean,
  x integer NOT NULL,
  y integer NOT NULL,
  map_id integer NOT NULL,
  building_id integer,
  CONSTRAINT tiles_pkey PRIMARY KEY (id),
  CONSTRAINT fk4c20b65b1a758e7 FOREIGN KEY (building_id)
      REFERENCES physical_building (building_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk4c20b65bd903ec4 FOREIGN KEY (map_id)
      REFERENCES map (map_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE tiles
  OWNER TO postgres;

最佳答案

我使用 VARCHAR 类型的 t_type 列运行上面的代码,它运行良好。数据库中的 t_type 列是否为 VARCHAR 类型?

关于java - Hibernate DiscriminatorColumn.Type 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20223694/

相关文章:

java - 获取hibernate和mysql中的所有记录数和前100条记录

java - 在 hibernate 状态下禁用对多对一实体的更新

java - hibernate 鉴别器

java - 通过引用在java中传递参数

java - 带有路径注释的简单 REST 服务 - 404 错误

java - 如何在 JPA 和 Hibernate 中的实体合并中避免 java.util.ConcurrentModificationException

java - Hibernate 在关系中创建错误的实体子类型

java - Android arraylist<String> 转为单个字符串

java - Google App Engine - 无法在单个事务中对多个实体组进行操作

grails - 初始化使用Grails鉴别器配置的子类对象