I have been having issues with my Hibernate attempting to persist and find instances from the database. After investigating, it was suggested that dropping the table and rerunning the application might help. After executing the command drop table users;
in the database, my spring application will not recreate the entity onto the schema. I have tried changing the dll-auto
property but nothing happens. I am using the spring-boot-starter-data-jpa
dependency and not a hibernate.cfg.xml file. Furthermore, after persisting a User to the db (when there is a users table), the EntityManager.find() method returns null despite the fact that there is a row for a user.
application.properties:
spring.jpa.hibernate.ddl-auto=create
spring.jpa.generate-ddl=true
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://ec2-54-243-187-30.compute-1.amazonaws.com:5432/dbte05lnlcfhd2?user=gmjgnsqxmifijr&password=cc713437b57783d84638d0a3a91bcecd62527cbef98c7b4c25188113dc8c5147&sslmode=require
spring.datasource.username=
spring.datasource.password=
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.data.jpa.repositories.enabled=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
User.java:
package ca.mcgill.ecse321.ridesharing.model;
import javax.persistence.*;
import java.util.List;
import java.util.Set;
@Entity
@Table(name = "users")
@NamedQueries({
@NamedQuery(name = "User.findAll", query = "SELECT e FROM User e")
})
public class User{
private List<Double> ratings;
public void setRatings(List<Double> ratings) {
this.ratings=ratings;
}
public void addRating(double rating) {
this.ratings.add(rating);
}
@ElementCollection
@CollectionTable(name="ratings", joinColumns=@JoinColumn(name="username"))
@Column(name="rating")
public List<Double> getRatings(){
return this.ratings;
}
private String username;
public void setUsername(String value) {
this.username = value;
}
@Id
@Column(name = "username")
public String getUsername() {
return this.username;
}
private String password;
public void setPassword(String value) {
this.password = value;
}
@Column
public String getPassword() {
return this.password;
}
private String firstName;
public void setFirstName(String value) {
this.firstName = value;
}
@Column
public String getFirstName() {
return this.firstName;
}
private String lastName;
public void setLastName(String value) {
this.lastName = value;
}
@Column
public String getLastName() {
return this.lastName;
}
private String phoneNumber;
public void setPhoneNumber(String value) {
this.phoneNumber = value;
}
@Column
public String getPhoneNumber() {
return this.phoneNumber;
}
private String city;
public void setCity(String value) {
this.city = value;
}
@Column
public String getCity() {
return this.city;
}
private String address;
public void setAddress(String value) {
this.address = value;
}
@Column
public String getAddress() {
return this.address;
}
private double avgRating;
public void setAvgRating(double value) {
this.avgRating = value;
}
@Column
public double getAvgRating() {
return this.avgRating;
}
private int numTrips;
public void setNumTrips(int value) {
this.numTrips = value;
}
public void increaseNumTrips() {
this.numTrips = numTrips + 1;
}
@Column
public int getNumTrips() {
return this.numTrips;
}
private String role;
public void setRole(String value) {
this.role = value;
}
@Column
public String getRole() {
return this.role;
}
private Car car;
@OneToOne(mappedBy="driver", optional=true)
public Car getCar() {
return this.car;
}
public void setCar(Car car) {
this.car = car;
}
private Location request;
@OneToOne(mappedBy="passenger", optional=false)
public Location getRequest() {
return this.request;
}
public void setRequest(Location request) {
this.request = request;
}
}
Console log upon start:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.6.RELEASE)
2018-11-01 11:22:11.577 INFO 76995 --- [ main] c.m.e.r.RideSharingApplication : Starting RideSharingApplication on Noams-MacBook-Pro.local with PID 76995 (/Users/noamsuissa/Desktop/RideSharing/RideSharingv2/target/classes started by noamsuissa in /Users/noamsuissa/Desktop/RideSharing/RideSharingv2)
2018-11-01 11:22:11.581 INFO 76995 --- [ main] c.m.e.r.RideSharingApplication : No active profile set, falling back to default profiles: default
2018-11-01 11:22:11.647 INFO 76995 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@14a2f921: startup date [Thu Nov 01 11:22:11 EDT 2018]; root of context hierarchy
2018-11-01 11:22:12.593 INFO 76995 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$f345ba74] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-11-01 11:22:12.931 INFO 76995 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2018-11-01 11:22:12.949 INFO 76995 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2018-11-01 11:22:12.950 INFO 76995 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.34
2018-11-01 11:22:12.953 INFO 76995 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/noamsuissa/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]
2018-11-01 11:22:13.027 INFO 76995 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2018-11-01 11:22:13.028 INFO 76995 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1386 ms
2018-11-01 11:22:13.091 INFO 76995 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/]
2018-11-01 11:22:13.096 INFO 76995 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-11-01 11:22:13.096 INFO 76995 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-11-01 11:22:13.096 INFO 76995 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-11-01 11:22:13.096 INFO 76995 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2018-11-01 11:22:13.236 INFO 76995 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2018-11-01 11:22:13.736 INFO 76995 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2018-11-01 11:22:13.803 INFO 76995 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2018-11-01 11:22:13.820 INFO 76995 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2018-11-01 11:22:13.994 INFO 76995 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.2.17.Final}
2018-11-01 11:22:13.995 INFO 76995 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2018-11-01 11:22:14.029 INFO 76995 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2018-11-01 11:22:14.134 INFO 76995 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL95Dialect
2018-11-01 11:22:21.538 INFO 76995 --- [ main] o.h.e.j.e.i.LobCreatorBuilderImpl : HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
at org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl.useContextualLobCreation(LobCreatorBuilderImpl.java:113) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl.makeLobCreatorBuilder(LobCreatorBuilderImpl.java:54) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl.<init>(JdbcEnvironmentImpl.java:271) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:114) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:861) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:888) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) [spring-orm-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) [spring-orm-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) [spring-orm-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) [spring-orm-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) [spring-orm-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1753) [spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1690) [spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573) [spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495) [spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) [spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) [spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) [spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1087) ~[spring-context-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857) ~[spring-context-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:548) ~[spring-context-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at ca.mcgill.ecse321.ridesharing.RideSharingApplication.main(RideSharingApplication.java:13) ~[classes/:na]
Caused by: java.sql.SQLFeatureNotSupportedException: Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented.
at org.postgresql.Driver.notImplemented(Driver.java:688) ~[postgresql-42.2.5.jar:42.2.5]
at org.postgresql.jdbc.PgConnection.createClob(PgConnection.java:1269) ~[postgresql-42.2.5.jar:42.2.5]
... 44 common frames omitted
2018-11-01 11:22:21.539 INFO 76995 --- [ main] org.hibernate.type.BasicTypeRegistry : HHH000270: Type registration [java.util.UUID] overrides previous : org.hibernate.type.UUIDBinaryType@6c6333cd
2018-11-01 11:22:21.985 INFO 76995 --- [ main] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory
2018-11-01 11:22:22.044 INFO 76995 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2018-11-01 11:22:22.244 INFO 76995 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-11-01 11:22:22.467 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@14a2f921: startup date [Thu Nov 01 11:22:11 EDT 2018]; root of context hierarchy
2018-11-01 11:22:22.497 WARN 76995 --- [ main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2018-11-01 11:22:22.532 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/vehicle/create],methods=[POST]}" onto public java.lang.String ca.mcgill.ecse321.ridesharing.controller.CarController.createVehicle(java.lang.String,java.lang.String,java.lang.String)
2018-11-01 11:22:22.533 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/vehicle/assignCar/{username}/{id}]}" onto public java.lang.String ca.mcgill.ecse321.ridesharing.controller.CarController.assignUserToCar(java.lang.String,java.lang.String)
2018-11-01 11:22:22.533 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/vehicle/{id}],methods=[GET]}" onto public ca.mcgill.ecse321.ridesharing.model.Car ca.mcgill.ecse321.ridesharing.controller.CarController.getVehicle(int)
2018-11-01 11:22:22.540 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/location/getLocation/{id}],methods=[GET]}" onto public ca.mcgill.ecse321.ridesharing.model.Location ca.mcgill.ecse321.ridesharing.controller.LocationController.getLocation(int)
2018-11-01 11:22:22.540 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/location/create],methods=[POST]}" onto public java.lang.String ca.mcgill.ecse321.ridesharing.controller.LocationController.createLocation(java.lang.String,java.lang.String,double,int)
2018-11-01 11:22:22.540 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/location/addPassenger/{username}/{routeId}/{locationId}],methods=[POST]}" onto public java.lang.String ca.mcgill.ecse321.ridesharing.controller.LocationController.registerUserToLocation(java.lang.String,int,int)
2018-11-01 11:22:22.541 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/location/assignLocations/{routeId}],methods=[POST]}" onto public java.lang.String ca.mcgill.ecse321.ridesharing.controller.LocationController.setLocationsToRoute(int)
2018-11-01 11:22:22.543 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public java.lang.String ca.mcgill.ecse321.ridesharing.controller.MainController.sayHello()
2018-11-01 11:22:22.544 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/route/create],methods=[POST]}" onto public java.lang.String ca.mcgill.ecse321.ridesharing.controller.RouteController.createRoute(java.lang.String,int,java.lang.String,java.lang.String)
2018-11-01 11:22:22.544 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/route/getRoutes/{username}],methods=[GET]}" onto public java.util.List<ca.mcgill.ecse321.ridesharing.model.Route> ca.mcgill.ecse321.ridesharing.controller.RouteController.getRoutes(java.lang.String)
2018-11-01 11:22:22.545 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/route/getRoute/{id}],methods=[GET]}" onto public ca.mcgill.ecse321.ridesharing.model.Route ca.mcgill.ecse321.ridesharing.controller.RouteController.getRoute(int)
2018-11-01 11:22:22.546 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/user/getUser/{id}],methods=[GET]}" onto public ca.mcgill.ecse321.ridesharing.model.User ca.mcgill.ecse321.ridesharing.controller.UserController.getId(java.lang.String)
2018-11-01 11:22:22.546 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/user/create],methods=[POST]}" onto public java.lang.String ca.mcgill.ecse321.ridesharing.controller.UserController.createUser(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)
2018-11-01 11:22:22.546 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/user/addRating/{username}/{rating}],methods=[GET]}" onto public java.lang.String ca.mcgill.ecse321.ridesharing.controller.UserController.addRating(java.lang.String,java.lang.String)
2018-11-01 11:22:22.546 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/user/login/{username}/{password}],methods=[GET]}" onto public boolean ca.mcgill.ecse321.ridesharing.controller.UserController.login(java.lang.String,java.lang.String)
2018-11-01 11:22:22.549 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-11-01 11:22:22.550 INFO 76995 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-11-01 11:22:22.584 INFO 76995 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-11-01 11:22:22.585 INFO 76995 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-11-01 11:22:22.880 INFO 76995 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-11-01 11:22:22.882 INFO 76995 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'dataSource' has been autodetected for JMX exposure
2018-11-01 11:22:22.887 INFO 76995 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource]
2018-11-01 11:22:22.925 INFO 76995 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2018-11-01 11:22:22.929 INFO 76995 --- [ main] c.m.e.r.RideSharingApplication : Started RideSharingApplication in 11.609 seconds (JVM running for 12.36)
UserRepositry.java
package ca.mcgill.ecse321.ridesharing.repository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import ca.mcgill.ecse321.ridesharing.model.*;
import javax.persistence.*;
import java.util.List;
@Repository
public class UserRepository {
@PersistenceContext
EntityManager em;
@Transactional
public double addToRatings(String username, double rating) {
User driver = getUser(username);
driver.increaseNumTrips();
driver.addRating(rating);
double avgRating = computeRating(username);
return avgRating;
}
@Transactional
public double computeRating(String username) {
User driver = getUser(username);
int numPastTrips = driver.getNumTrips();
List<Double> ratings = driver.getRatings();
double avgRating=0;
for (Double rating : ratings) {
avgRating += rating;
}
avgRating /= numPastTrips;
driver.setAvgRating(avgRating);
em.persist(driver);
return avgRating;
}
@Transactional
public User createUser(String username, String password, String firstname, String lastname, String phonenumber,
String city, String address, String role) {
User user = new User();
boolean userValid = validateUsername(username);
if(userValid) {
user.setUsername(username);
}else {
return null;
}
user.setPassword(password);
user.setFirstName(firstname);
user.setLastName(lastname);
user.setPhoneNumber(phonenumber);
user.setCity(city);
user.setAddress(address);
user.setRole(role);
user.setRatings(null);
//user.setAvgRating(0);
//user.setNumTrips(0);
em.persist(user);
return user;
}
public boolean validateUsername(String username) {
Query query = em.createNativeQuery("select username from users;");
@SuppressWarnings("unchecked")
List<String> usernames = (List<String>) query.getResultList();
for (String thisUsername : usernames) {
if(username.equals(thisUsername)) {
return false;
}
}
return true;
}
public boolean login(String username, String password) {
Query query_user = em.createNativeQuery("select username from users;");
@SuppressWarnings("unchecked")
List<String> usernames = (List<String>) query_user.getResultList();
for (String thisUsername : usernames) {
if(username.equals(thisUsername)) {
User user = em.find(User.class, username);
String userPassword = user.getPassword();
if (userPassword.equals(password)) {
return true;
}
}
}
return false;
}
@Transactional
public User getUser(String id) {
return em.find(User.class, id);
}
}
EDIT
First issue resolved by running mvn clean install -DskipTests
.
The second issue still remains, running the getUser()
method in UserRepository.java
through a REST api returns null.
Change your properties to this :
# Disable feature detection by this undocumented parameter. Check the org.hibernate.engine.jdbc.internal.JdbcServiceImpl.configure method for more details.
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
# Because detection is disabled you have to set correct dialect by hand.
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL9Dialect
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.