Witam
Tworzę aplikację web z wykorzystaniem architektury REST w technologiach Spring 3.2, Hibernate 3.6. Próbuje wykonać banalny zapis pojedynczej encji do bazy, która w zaskakujący sposób sprawia mi problem (tylko ta, reszta działa mi poprawnie). Mam dwie encji Worker oraz Role w zależności jeden-do-wielu. Moje obiekty wyglądają następująco:
@Entity
@Table(name = "worker", catalog = "schedule")
public class Worker implements java.io.Serializable {
private static final long serialVersionUID = -5285909515638832506L;
private Integer idWorker;
private Role role;
private String name;
private String surname;
private Integer phone;
private Float salary;
private String desc;
private Set<Timeday> timedays = new HashSet<Timeday>(0);
private Set<Order> orders = new HashSet<Order>(0);
private Set<Timeweek> timeweeks = new HashSet<Timeweek>(0);
public Worker() {
}
public Worker(Role role) {
this.role = role;
}
public Worker(Role role, String name, String surname, Integer phone,
Float salary, String desc, Set<Timeday> timedays, Set<Order> orders, Set<Timeweek> timeweeks) {
this.role = role;
this.name = name;
this.surname = surname;
this.phone = phone;
this.salary = salary;
this.desc = desc;
this.timedays = timedays;
this.orders = orders;
this.timeweeks = timeweeks;
}
public Worker(WorkerDTO workerDto) {
this.idWorker = workerDto.getIdWorker();
this.name = workerDto.getName();
this.surname = workerDto.getSurname();
this.phone = workerDto.getPhone();
this.salary = workerDto.getSalary();
this.desc = workerDto.getDesc();
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "idWorker", unique = true, nullable = false)
public Integer getIdWorker() {
return this.idWorker;
}
public void setIdWorker(Integer idWorker) {
this.idWorker = idWorker;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idRole", nullable = false)
public Role getRole() {
return this.role;
}
public void setRole(Role role) {
this.role = role;
}
@Column(name = "Name", length = 45)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "Surname", length = 45)
public String getSurname() {
return this.surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
@Column(name = "Phone")
public Integer getPhone() {
return this.phone;
}
public void setPhone(Integer phone) {
this.phone = phone;
}
@Column(name = "Salary")
public Float getSalary() {
return this.salary;
}
public void setSalary(Float salary) {
this.salary = salary;
}
@Column(name = "Desc", length = 100)
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, mappedBy = "worker")
public Set<Timeday> getTimedays() {
return this.timedays;
}
public void setTimedays(Set<Timeday> timedays) {
this.timedays = timedays;
}
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, mappedBy = "worker")
public Set<Order> getOrders() {
return this.orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, mappedBy = "worker")
public Set<Timeweek> getTimeweeks() {
return this.timeweeks;
}
public void setTimeweeks(Set<Timeweek> timeweeks) {
this.timeweeks = timeweeks;
}
}
@Entity
@Table(name = "role", catalog = "schedule")
public class Role implements java.io.Serializable {
private static final long serialVersionUID = -6681196270422194217L;
private Integer idRole;
private String name;
private Set<Worker> workers = new HashSet<Worker>(0);
private Set<Requestroles> requestroleses = new HashSet<Requestroles>(0);
public Role() {
}
public Role(String name, Set<Worker> workers, Set<Requestroles> requestroleses) {
this.name = name;
this.workers = workers;
this.requestroleses = requestroleses;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "idRole", unique = true, nullable = false)
public Integer getIdRole() {
return this.idRole;
}
public void setIdRole(Integer idRole) {
this.idRole = idRole;
}
@Column(name = "Name", length = 45)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@JsonBackReference
@OneToMany(fetch = FetchType.EAGER, mappedBy = "role")
public Set<Worker> getWorkers() {
return this.workers;
}
public void setWorkers(Set<Worker> workers) {
this.workers = workers;
}
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, mappedBy = "role")
public Set<Requestroles> getRequestroleses() {
return this.requestroleses;
}
public void setRequestroleses(Set<Requestroles> requestroleses) {
this.requestroleses = requestroleses;
}
}
Moja metoda w API REST wygląda następująco:
@ResponseBody
@RequestMapping(value="/workers/new", method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
@ResponseStatus(HttpStatus.NO_CONTENT)
public String saveWorker(@RequestBody @Valid WorkerDTO workerDto) {
Worker worker = new Worker(workerDto);
Role role = dbService.getRole(workerDto.getRole().getName());
worker.setRole(role);
dbService.saveWorker(worker);
return "saved";
}
Niby wszystko OK ALE dostaję błąd;)
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Desc, Name, Phone, idRole, Salary, Surname) values ('asdsad', 'asas', 23232, 3, ' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:93)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:56)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2346)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2853)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:201)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:147)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:71)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)
at org.schedule.database.repository.impl.GenericDAOImpl.save(GenericDAOImpl.java:29)
at org.schedule.database.facade.DatabaseServiceImpl.saveWorker(DatabaseServiceImpl.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy222.saveWorker(Unknown Source)
at org.schedule.service.rest.WorkersController.saveWorker(WorkersController.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.schedule.service.filters.CorsFilter.doFilterInternal(CorsFilter.java:22)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
Próbowałem skonfigurować glassfisha aby logował mi sql które idą do bazy, kierowałem się tym tutorialem:
https://wikis.oracle.com/display/GlassFish/Detailed+Logging+Output+with+GlassFish+Server,+Hibernate,+and+Log4j
Ale niestety nie działa mi logowanie zapytań. Wrzuciłem wszystkie wymagane pliki do glassfish/lib zmieniłam ustawienia w DriverManagerDataSource konfiguracji springa oraz stworzyłem plik log4j.properties. Proszę o jakiekolwiek porady.