【发布时间】:2019-04-11 07:31:03
【问题描述】:
我创建了一个数据库,它有一个 ENUM 表的引用,我在这个枚举的实体中有异常。
脚本示例:
CREATE TABLE status (
code VARCHAR(40),
status ENUM('not started', 'in progress', 'finished')
);
insert into status (code, status)
values (1, 'not started'),
(2, 'in progress'),
(3, 'finished');
CREATE TABLE `explorer` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`create_date` datetime DEFAULT NULL,
`query` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
`title` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
`status_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (status_id) REFERENCES status(code)
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
所以,在创建表之后,我确实为这些表自动创建了实体:
-
探索者:
@Entity @Table(name = "explorer", schema = "parsebeandeveloper", catalog = "") public class ExplorerEntity { private long id; private Timestamp createDate; private String query; private String title; private Integer statusId; @Id @Column(name = "id") public long getId() { return id; } public void setId(long id) { this.id = id; } @Basic @Column(name = "create_date") public Timestamp getCreateDate() { return createDate; } public void setCreateDate(Timestamp createDate) { this.createDate = createDate; } @Basic @Column(name = "query") public String getQuery() { return query; } public void setQuery(String query) { this.query = query; } @Basic @Column(name = "title") public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } @Basic @Column(name = "status_id") public Integer getStatusId() { return statusId; } public void setStatusId(Integer statusId) { this.statusId = statusId; } }
类,我得到异常的地方:
-
状态:
@Entity @Table(name = "status", schema = "parsebeandeveloper") public class StatusEntity { private Integer code; private Object status; @Basic @Column(name = "code") public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } @Basic @Column(name = "status") public Object getStatus() { return status; } public void setStatus(Object status) { this.status = status; }}
那,我在控制台中得到的:
org.springframework.beans.factory.BeanCreationException:
在类路径中定义名称为“entityManagerFactory”的 bean 创建错误 资源 [org/springframework/boot/autoconfigure/orm/jpa /HibernateJpaConfiguration.class]: init 方法调用失败;嵌套 > 异常是 javax.persistence.PersistenceException: [PersistenceUnit: default] 无法构建 Hibernate SessionFactory;嵌套异常是 org.hibernate.MappingException: 属性映射的数量错误 列:com.sb.bean.parser.explorer.model.domain2.StatusEntity.status 类型:> 对象
我想,我确实犯了错误
-
在创建表
explorer,在字符串中:FOREIGN KEY (status_id) REFERENCES status(code) 或在创建类
EntityStatus
这种情况下如何正确创建Status实体或创建表间引用?
【问题讨论】:
-
将
StatusEntity的code和status字段改成String类型,看看是否有效。 -
@tsolakp 我刚刚将
status类型更改为字符串,一切正常。谢谢 -
@tsolakp 如果你回答,我会接受它