I am creating a spring boot application using MS SQL server. I have a requirement where I need to initialize USERS table in user_database database using data.sql file placed in /src/main/resources/ folder and rest of the tables should be created automatically in springboot_db database with the help of @Table annotation. Below is the code snippet.
applicaiton.properties file
spring.datasource.platform=mssql spring.datasource.url=jdbc:sqlserver://localhost;databaseName=springboot_db spring.datasource.username=sa spring.datasource.password=einfochips@123 spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=create-drop spring.datasource.initialize=true
data.sql
USE master IF EXISTS(select name from sys.databases where name='user_database') DROP DATABASE user_database; CREATE DATABASE user_database; USE user_database; CREATE TABLE tbl_users ( id INTEGER NOT NULL IDENTITY(1,1), name VARCHAR(25), email VARCHAR(50), username VARCHAR(25), password VARCHAR(225), gender VARCHAR(1), contact_number VARCHAR(12), address VARCHAR(150), country VARCHAR(20), newsletter BIT, framework VARCHAR(500), skill VARCHAR(500), role_id INTEGER, PRIMARY KEY (id) ); INSERT INTO tbl_users (name, email, username, password, gender, contact_number, address, country, newsletter, framework, skill, role_id) VALUES ('Admin User1', 'admin@gmail.com', 'admin', '$2a$10$WOf9uuaNfUgqpfXrfK1QiO.scUjxJMA.wENEu4c8GJMbPhFwbxMwu', 'f', 919979294062, 'Ahmedabad', 'India', 0, 'Spring MVC', 'Spring', 1);
AppConfiguration.java (One of the entity file)
@Entity @Table(name = "tbl_configuration_details") public class AppConfiguration implements Serializable { /** * */ private static final long serialVersionUID = 6657691404940352980L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "config_id") private Integer id; @Column(name = "schedule_time") private Integer scheduleTimePeriod; // other variables and respective getter setters }
If I am running my application keeping both the approaches separately than its working fine. When I merge both into a single application, it is showing following error.
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'tbl_configuration_details'. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:232) ~[mssql-jdbc-6.1.0.jre7.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1672) ~[mssql-jdbc-6.1.0.jre7.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:460) ~[mssql-jdbc-6.1.0.jre7.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:405) ~[mssql-jdbc-6.1.0.jre7.jar:na] at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7535) ~[mssql-jdbc-6.1.0.jre7.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2438) ~[mssql-jdbc-6.1.0.jre7.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:208) ~[mssql-jdbc-6.1.0.jre7.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:183) ~[mssql-jdbc-6.1.0.jre7.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:317) ~[mssql-jdbc-6.1.0.jre7.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_144] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_144] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_144] at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114) ~[tomcat-jdbc-8.5.23.jar:na] at com.sun.proxy.$Proxy92.executeQuery(Unknown Source) ~[na:na] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] ... 94 common frames omitted
Advertisement
Answer
Using the same database for both the tables resolves my issue. However, I am still confused as to why I am not allowed to use two different databases?