Results 1 to 9 of 9
  1. #1
    Jack_Tauson_Sr is offline Senior Member
    Join Date
    Nov 2011
    Posts
    165
    Rep Power
    8

    Default Trying to figure out hibernate SELECT statement issues

    As I am new to this Hibernate and Spring framework world,I am facing one issue where every thing works perfectly fine in `Scenario 1` and same thing doesn't work in `Scenario 2`.I have tried copying the exact same code which I am using in Eclipse to the server but it doesn't work on the server.


    Scenario 1:

    The following code is displayed in my Eclipse console when I run the application (a maven based project for REStful webservice) locally which clearly shows that
    everything went fine while inserting data into the database.



    Java Code:
        2017-05-04 14:48:13.826  INFO 7464 --- [nio-8080-exec-2] u.r.o.d.i.InsertEmployeeDetailsDaoImpl : Starting InsertEmployeeDetailsDaoImpl.insert() .....
        Hibernate: 
            select
                EMP_WORK_LIST_AUTOINC_SEQ.nextval 
            from
                dual
        Hibernate: 
            select
                EMP_WORK_ID_HIST_AUTOINC_SEQ.nextval 
            from
                dual
        Hibernate: 
            insert 
            into
                EMPLOYEE_DETAILS_LIST
                (ASSIGNER_ID, ASSIGNMENT_DATE, ADMIN_CODE, LIST_ID, EMPLOYEE_KEY, IS_VALID, ADMINISTRATOR_COMMENT, ADMINISTRATOR_ID, VALUE, EVENT_LIST_ID) 
            values
                (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        Hibernate: 
            insert 
            into
                ADMINISTRATOR_ENC_LIST_HIST
                (CUR_ASSIGN_DATE, CUR_ASSIGNER_ID, CUR_CODE, CUR_COMMENT, CUR_LIST_ID, CUR_IS_VALID, CUR_VALUE, EVENT_LIST_ID, PREV_ASSIGN_DATE, PREV_ASSIGNER_ID, PREV_CODE, PREV_COMMENT, PREV_LIST_ID, PREV_IS_VALID, PREV_VALUE, ID) 
            values
                (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        2017-05-04 14:48:14.233  INFO 7464 --- [nio-8080-exec-2] u.r.o.d.i.InsertEmployeeDetailsDaoImpl : Completed InsertEmployeeDetailsDaoImpl.insert() .....

    Scenario 2:
    Following messages is what I am seeing at the server console when I try to do insert operation from the code deployed on the server:


    Java Code:
        2017-05-05 09:39:59.869  INFO 15305 --- [nio-8443-exec-8] u.r.o.d.i.InsertEmployeeDetailsDaoImpl : Starting InsertEmployeeDetailsDaoImpl.insert() .....
        Hibernate:
            select
                EMP_EMPLOYEE_SEQ_AUTOINC.nextval
            from
                dual
        Hibernate:
            insert
            into
                EMPLOYEE_DETAILS_LIST
                (ASSIGNER_ID, ASSIGNMENT_DATE, ADMIN_CODE, LIST_ID, EMPLOYEE_KEY, ADMINISTRATOR_COMMENT, ADMINISTRATOR_ID, VALUE, EVENT_LIST_ID)
            values
                (?, ?, ?, ?, ?, ?, ?, ?, ?)
        2017-05-05 09:39:59.875  WARN 15305 --- [nio-8443-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1, SQLState: 23000
        2017-05-05 09:39:59.875 ERROR 15305 --- [nio-8443-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper   : ORA-00001: unique constraint (ORACLE_DEV_DB.EMPLOYEE_DETAILS_LIST_PK) violated
        
        2017-05-05 09:39:59.875  INFO 15305 --- [nio-8443-exec-8] o.h.e.j.b.internal.AbstractBatchImpl     : HHH000010: On release of batch it still contained JDBC statements
        org.hibernate.exception.ConstraintViolationException: could not execute statement
                at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:72)
                at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
                at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
                at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
                at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190)
                at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62)
                at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3124)
                at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3581)
                at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:104)
                at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)
                at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349)
                at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
                at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
                at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
                at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
                at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
                at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
                at edu.uab.ADMINISTRATOR.orm.dao.impl.InsertEmployeeDetailsDaoImpl.insert(InsertEmployeeDetailsDaoImpl.java:34)
                at edu.uab.ADMINISTRATOR.controller.ADMINISTRATOREMPLOYEELISTController.createEMPLOYEEAttribute(ADMINISTRATOREMPLOYEELISTController.java:125)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
                at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
                at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
                at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:817)
                at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:731)
                at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
                at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
                at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
                at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968)
                at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
                at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.apache.catalina.filters.CorsFilter.handleSimpleCORS(CorsFilter.java:301)
                at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:165)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:237)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:112)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:120)
                at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:61)
                at org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:95)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
                at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
                at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
                at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
                at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
                at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
                at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
                at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
                at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
                at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
                at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
                at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
                at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
                at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
                at java.lang.Thread.run(Thread.java:745)
        Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (ORACLE_DEV_DB.EMPLOYEE_DETAILS_LIST_PK) violated
        
                at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
                at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
                at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017)
                at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)
                at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
                at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
                at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
                at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:58)
                at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:943)
                at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1075)
                at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3820)
                at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3897)
                at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361)
                at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
                at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
                at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187)
                ... 91 more
        2017-05-05 09:39:59.880  INFO 15305 --- [nio-8443-exec-8] u.r.o.d.i.InsertEmployeeDetailsDaoImpl : Completed InsertEmployeeDetailsDaoImpl.insert()
    Observations:
    1) As I noticed that the select statement in Scenario 1 which is select EMP_WORK_LIST_AUTOINC_SEQ.nextval different from the one mentioned in the Scenario 2 which is select EMP_EMPLOYEE_SEQ_AUTOINC.nextval. I tried searching for the above statements in my Java code but couldn't find anything. Is there any specific location I should be trying to find this out? I believe this SELECT query difference on server is causing java.sql.SQLIntegrityConstraintViolationException: as mentioned in the above stack trace.

    Please let me now if more information is needed.

  2. #2
    Tolls is offline Moderator
    Join Date
    Apr 2009
    Posts
    13,541
    Rep Power
    26

    Default Re: Trying to figure out hibernate SELECT statement issues

    The tables clearly aren't the same (or the mappings anyway), simply from looking at the INSERT statement.

    So, go into the database and see what the two tables look like.
    That is, get the DDL for the tables, including any keys.

    Is the code supposed to be the same between your Eclipse and the server?
    Please do not ask for code as refusal often offends.

    ** This space for rent **

  3. #3
    Jack_Tauson_Sr is offline Senior Member
    Join Date
    Nov 2011
    Posts
    165
    Rep Power
    8

    Default Re: Trying to figure out hibernate SELECT statement issues

    Quote Originally Posted by Tolls View Post
    The tables clearly aren't the same (or the mappings anyway), simply from looking at the INSERT statement.

    So, go into the database and see what the two tables look like.
    That is, get the DDL for the tables, including any keys.

    Is the code supposed to be the same between your Eclipse and the server?
    Thanks Tolls. Yes, the code is supposed to be the same between my Eclipse and the server. It looks like those statements are coming from a trigger defined in my database.Still, my local eclipse setup is also connecting to the same database as the code present on the server and hence wondering why two things are calling different triggers.

  4. #4
    Tolls is offline Moderator
    Join Date
    Apr 2009
    Posts
    13,541
    Rep Power
    26

    Default Re: Trying to figure out hibernate SELECT statement issues

    Your code won't be logging any database triggers.
    More importantly, any triggers will have no effect on the queries generated by Hibernate.
    Those are pretty much defined by your Java model and mappings.

    So, I'd say different code, or those are not logs for the same bit of code.
    Please do not ask for code as refusal often offends.

    ** This space for rent **

  5. #5
    Jack_Tauson_Sr is offline Senior Member
    Join Date
    Nov 2011
    Posts
    165
    Rep Power
    8

    Default Re: Trying to figure out hibernate SELECT statement issues

    Quote Originally Posted by Tolls View Post
    Your code won't be logging any database triggers.
    More importantly, any triggers will have no effect on the queries generated by Hibernate.
    Those are pretty much defined by your Java model and mappings.

    So, I'd say different code, or those are not logs for the same bit of code.
    Hi Tolls,


    To investigate code related difference between my local eclipse setup and the one on server, I am trying to investigate the following line of statement in my code :

    InsertEmployeeDetailsDaoImpl.insert() .....

    Hence I tried to do a quick search using the eclipse search option and the only place I could find it was in the
    ApplicationContext.xml where `InsertEmployeeDetailsDaoImpl` is mentioned as the class attribute for a bean id. This
    seems like hibernate mapping is done But I am not sure how this class and bean id defined is connecting to the database.
    Because after figuring out this step only I can see how there are two different triggers getting called for same piece of code or if theres any code mismatch.

    As I can see the following in my console log:

    Java Code:
     Hibernate: 
            select
                EMP_WORK_LIST_AUTOINC_SEQ.nextval 
            from
                dual
    I found the above select statement written inside Trigger with name EMP_WORK_LIST_AUTOINC_TRG



    Would you have any idea whether my troubleshooting steps are in the right direction and how to resolve some of the roadblocks I mentioned above? Thanks

    Let me know if the code in my original post is not fully visible as I can see only half of it at my end.

  6. #6
    Jack_Tauson_Sr is offline Senior Member
    Join Date
    Nov 2011
    Posts
    165
    Rep Power
    8

    Default Re: Trying to figure out hibernate SELECT statement issues

    Quote Originally Posted by Jack_Tauson_Sr View Post
    Hi Tolls,


    To investigate code related difference between my local eclipse setup and the one on server, I am trying to investigate the following line of statement in my code :

    InsertEmployeeDetailsDaoImpl.insert() .....

    Hence I tried to do a quick search using the eclipse search option and the only place I could find it was in the
    ApplicationContext.xml where `InsertEmployeeDetailsDaoImpl` is mentioned as the class attribute for a bean id. This
    seems like hibernate mapping is done But I am not sure how this class and bean id defined is connecting to the database.
    Because after figuring out this step only I can see how there are two different triggers getting called for same piece of code or if theres any code mismatch.

    As I can see the following in my console log:

    Java Code:
     Hibernate: 
            select
                EMP_WORK_LIST_AUTOINC_SEQ.nextval 
            from
                dual
    I found the above select statement written inside Trigger with name EMP_WORK_LIST_AUTOINC_TRG



    Would you have any idea whether my troubleshooting steps are in the right direction and how to resolve some of the roadblocks I mentioned above? Thanks

    Let me know if the code in my original post is not fully visible as I can see only half of it at my end.
    I actually found where the code is which was a completely different project that I had to import. However, for some reason, I see a different sequence getting called on the server with the same code and correct sequence getting called on the local setup of eclipse. How does remote eclipse java debugging sounds in this scenario to see the flow and then see it on the server? I guess I can only do this on my eclipse setup and not on the server.

  7. #7
    Tolls is offline Moderator
    Join Date
    Apr 2009
    Posts
    13,541
    Rep Power
    26

    Default Re: Trying to figure out hibernate SELECT statement issues

    If the server is set up for debugging then you can debug it.
    If not then you can't.

    "...where `InsertEmployeeDetailsDaoImpl` is mentioned as the class attribute for a bean id."

    I don't understand that at all. What does the highlighted part mean?
    Can you show the relevant bit of the xml file?
    Please do not ask for code as refusal often offends.

    ** This space for rent **

  8. #8
    Jack_Tauson_Sr is offline Senior Member
    Join Date
    Nov 2011
    Posts
    165
    Rep Power
    8

    Default Re: Trying to figure out hibernate SELECT statement issues

    Quote Originally Posted by Tolls View Post
    If the server is set up for debugging then you can debug it.
    If not then you can't.

    "...where `InsertEmployeeDetailsDaoImpl` is mentioned as the class attribute for a bean id."

    I don't understand that at all. What does the highlighted part mean?
    Can you show the relevant bit of the xml file?
    Thanks. The problem is solved. there was one old library which the server was referring to and hence it wasn't getting latest changes and latest code. thanks for your help !

  9. #9
    Tolls is offline Moderator
    Join Date
    Apr 2009
    Posts
    13,541
    Rep Power
    26

    Default Re: Trying to figure out hibernate SELECT statement issues

    No problem.
    Good you found it.

    Library issues can be a pain to track down!
    Please do not ask for code as refusal often offends.

    ** This space for rent **

Similar Threads

  1. How to select database at runtime in hibernate
    By Rupali Muley in forum Hibernate
    Replies: 1
    Last Post: 06-12-2014, 03:57 PM
  2. Replies: 4
    Last Post: 12-08-2012, 06:03 PM
  3. using strings in select statement
    By Shryans in forum Eclipse
    Replies: 1
    Last Post: 12-20-2011, 07:32 PM
  4. Replies: 6
    Last Post: 03-31-2011, 03:33 PM
  5. Replies: 0
    Last Post: 03-15-2009, 11:53 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •