gpt4 book ai didi

mysql - Hibernate 说不存在的列是未知的......显然

转载 作者:行者123 更新时间:2023-11-29 20:51:33 25 4
gpt4 key购买 nike

我开始调整我的 spring boot 项目以使用 jpa/hibernate。在这个阶段,我只想检索 mysql 数据库中表的 id。

以下是相关类:

@SpringBootApplication
@ComponentScan(basePackages = {"rest.api.controller", "dao", rest.api.model", "rest.api.config"})

public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);

}

@Bean
public CommandLineRunner demo(PostRepository repository) {
return (args) -> {
// save a couple of customers
repository.findAll();
};
}

}

@Entity
@Table(name="post")
public class Post {

private String text;

@Id
@GeneratedValue(strategy= GenerationType.AUTO)
@Column(name="id")
private long id;

@Column(name="sender_id")
private @JsonIgnore long senderId;
private @JsonIgnore long eventId;
private @JsonIgnore final String selectSql = " text, sender_id, event_id";

protected Post() {}

public Post(long id, float latitude, float longitude, Date created, String ip,
String text, long senderId, long eventId) {
this.text = text;
this.senderId = senderId;
this.eventId = eventId;
}

public Post(String text, long senderId, long eventId) {
this.text = text;
this.senderId = senderId;
this.eventId = eventId;
}

public String getText() {
return text;
}

public long getSenderId() {
return senderId;
}

public long getEventId() {
return eventId;
}

public void setId(long id) {
this.id = id;
}
}

public interface PostRepository extends CrudRepository<Post, Long> {

}

还有 mysql 的 post 表:

CREATE TABLE `post` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`text` varchar(4096) NOT NULL,
`sender_id` bigint(20) NOT NULL,
`event_id` bigint(20) DEFAULT NULL,
`created` datetime NOT NULL,
`ip` varchar(20) NOT NULL,
`latitude` float DEFAULT NULL,
`longitude` float DEFAULT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `post_sent_by_user` (`sender_id`),
CONSTRAINT `post_sent_by_user` FOREIGN KEY

我收到以下错误

2016-06-23 20:39:06.739  WARN 6895 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1054, SQLState: 42S22
2016-06-23 20:39:06.740 ERROR 6895 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Unknown column 'post0_.select_sql' in 'field list'
2016-06-23 20:39:06.750 WARN 6895 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Warning Code: 1054, SQLState: 42S22
2016-06-23 20:39:06.751 WARN 6895 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Unknown column 'post0_.select_sql' in 'field list'
2016-06-23 20:39:06.770 ERROR 6895 --- [ main] o.s.boot.SpringApplication : Application startup failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:809) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:790) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]
at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:777) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]
at rest.api.Application.main(Application.java:16) [main/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91]
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) [idea_rt.jar:na]
Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:242) ~[spring-orm-4.2.6.RELEASE.jar:4.2.6.RELEASE]

在我的一生中,我无法弄清楚为什么它正在寻找一个具有“post0_.select_sql”这样奇怪名称的列 - 似乎与我的表或列完全无关。

我在谷歌上搜索了一段时间,但找不到任何东西来解释这一点。

如果有人能在这里帮助我,我将非常感激。 (我确信它应该很简单,因为我还没有真正尝试任何复杂的事情)

谢谢

最佳答案

因为你告诉 Hibernate 你的实体有一个这样命名的持久字段:

private @JsonIgnore final String selectSql

我不知道这个字段的用途以及为什么它在您的实体中,但它可能应该在其他地方,或者至少定义为常量(即设为静态)或在最开始至少用 @Transient 注释,以便 Hibernate 知道它不是持久属性的一部分。

关于mysql - Hibernate 说不存在的列是未知的......显然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38000881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com