我的应用程序无法启动。它由Spring Boot+JPA+SQLite组成。但是Spring Boot和MySQL都运行得很好。我不明白为什么会这样。
错误是
找不到名为“Entity ManagerFactory”的bean
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.15.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.4.Final</version>
</dependency>
@Entity
public class Contact implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
int ContactID;
String Number;
String textMessage;
String DownloadID;
long ContactFlags;
public int getContactID() {
return ContactID;
}
public void setContactID(int contactID) {
ContactID = contactID;
}
public String getNumber() {
return Number;
}
public void setNumber(String number) {
Number = number;
}
public String getTextMessage() {
return textMessage;
}
public void setTextMessage(String textMessage) {
this.textMessage = textMessage;
}
public String getDownloadID() {
return DownloadID;
}
public void setDownloadID(String downloadID) {
DownloadID = downloadID;
}
public long getContactFlags() {
return ContactFlags;
}
public void setContactFlags(long contactFlags) {
ContactFlags = contactFlags;
}
}
public interface ContactRepository extends CrudRepository<Contact,Integer> {
}
@Configuration
public class DBConfig {
@Bean
public DataSource dataSource(){
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("org.sqlite.JDBC");
dataSourceBuilder.url("jdbc:sqlite::/home/vivien/viber.db");
return dataSourceBuilder.build();
}
}
public class SQLiteDialect extends Dialect {
SQLiteDialect(){
registerColumnType(Types.BIT, "integer");
registerColumnType(Types.TINYINT, "tinyint");
registerColumnType(Types.SMALLINT, "smallint");
registerColumnType(Types.INTEGER, "integer");
registerColumnType(Types.BIGINT, "bigint");
registerColumnType(Types.FLOAT, "float");
registerColumnType(Types.REAL, "real");
registerColumnType(Types.DOUBLE, "double");
registerColumnType(Types.NUMERIC, "numeric");
registerColumnType(Types.DECIMAL, "decimal");
registerColumnType(Types.CHAR, "char");
registerColumnType(Types.VARCHAR, "varchar");
registerColumnType(Types.LONGVARCHAR, "longvarchar");
registerColumnType(Types.DATE, "date");
registerColumnType(Types.TIME, "time");
registerColumnType(Types.TIMESTAMP, "timestamp");
registerColumnType(Types.BINARY, "blob");
registerColumnType(Types.VARBINARY, "blob");
registerColumnType(Types.LONGVARBINARY, "blob");
// registerColumnType(Types.NULL, "null");
registerColumnType(Types.BLOB, "blob");
registerColumnType(Types.CLOB, "clob");
registerColumnType(Types.BOOLEAN, "integer");
registerFunction( "concat", new VarArgsSQLFunction(StringType.INSTANCE, "", "||", "") );
registerFunction( "mod", new SQLFunctionTemplate( StringType.INSTANCE, "?1 % ?2" ) );
registerFunction( "substr", new StandardSQLFunction("substr", StringType.INSTANCE) );
registerFunction( "substring", new StandardSQLFunction( "substr", StringType.INSTANCE) );
}
public boolean supportsIdentityColumns() {
return true;
}
spring.datasource.url=jdbc:sqlite::/home/vivien/viber.db
spring.datasource.driver-class-name = org.sqlite.JDBC
spring.datasource.username=
spring.datasource.password=
spring.jpa.database-platform=com.example.demo.SQLiteDialect
spring.jpa.show-sql=true
@RestController
public class MyController {
@Autowired
ContactRepository contactRepository;
@GetMapping("/hello")
public String Hello(){
return "Hello Sqlite";
}
@GetMapping("/all")
public Iterable<Contact> getAll(){
return contactRepository.findAll();
}
}
O.S.B.D.LoggingFailureAnalysisReporter:
***********************************************************************************************************************************************************************************
描述:
com.example.demo.controller.MyController中的字段contactRepository需要一个名为“Entity ManagerFactory”的bean,但找不到该bean。
注入点具有以下批注:
-@org.springframework.beans.factory.annotation.AutoWired(required=true)
这里的问题是您在MyController类中自动连接了一个EntityManagerFactory。EntityManagerFactory无法由@AutoWired或@Resource直接注入
如果需要EntityMananger依赖项注入,请使用
@PersistenceContext
private EntityManager entityManager;
我被这个问题缠住了。当我尝试运行我的Spring启动应用程序时,我会收到以下消息: 我正在使用Spring Data JPA,如果我理解正确的话,当我使用例如JpaRepository接口时,entityManager会自动实现到我的项目中。我是否遗漏了什么?即使我使用的是JpaRepository,我是否应该为entityManager定义一个bean?我尝试将其更改为CrudRepositor
使用spring boot 2.0版本。0.M4我有这个问题:
我有一个使用JPA、Web和PostgreSQL的简单Spring Boot项目。我使用的是最新的Spring Boot版本2.1.3。
我正在尝试部署我的spring应用程序。以下是pom的副本。xml文件。 以下是申请的副本。属性文件。 我得到的错误跟踪如下。 我被夹在中间。我几乎没试过什么东西。因为提供entityManager的hibernate JPA启动器是从pom中删除hibernate核心和hibernate实体管理器的。xml也是如此。但我也犯了同样的错误。除此之外,我还创建了自定义datasoruce,如下所示。
> 启动ApplicationContext时出错。若要显示自动配置报告,请在启用“debug”的情况下重新运行应用程序 设置构造函数参数时无法解析对bean“Entity ManagerFactory”的引用 找不到名为“Entity ManagerFactory”的bean Field repository需要一个名为“Entity ManagerFactory”的bean,但找不到该bean
我正在开发一个小应用程序,只是为了自己尝试Spring Boot。它有五个不同的模块(eclipse项目): 模型——包含实体类、DTO和映射器以在它们之间切换 数据--包含存储库 服务——包含服务及其实现 reserve management--包含预订控制器和spring应用程序本身 人员管理-包含人员数据的控制器和Spring应用程序本身 如果我启动这两个应用中的任何一个,它们都可以正常运行