0
votes

I have a Derby Database Table with the following fields. The database ID fields automatically generates and increments.

create table "Yaya".SERVICELOG
(
ID INTEGER default AUTOINCREMENT: start 1 increment 1 not null primary key,
TXTIME TIMESTAMP,
EVENTLEVEL INTEGER,
EVENTTYPE VARCHAR(255),
DESCRIPTION VARCHAR(4096)
)

Using NetBeans I am trying to use Hibernate as an ORM. I have used Linq2SQL and EF before...This is becoming traumatic.

Here is my generated POJO, I believe the annotations are correct.

// Generated Sep 19, 2014 12:26:20 PM by Hibernate Tools 4.3.1


import java.util.Date;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 * Servicelog generated by hbm2java
 */
public class Servicelog  implements java.io.Serializable {

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
 private int id;
 private Date txtime;
 private Integer eventlevel;
 private String eventtype;
 private String description;

public Servicelog() {
}


public Servicelog(int id) {
    this.id = id;
}
public Servicelog(int id, Date txtime, Integer eventlevel, String eventtype, String description) {
   this.id = id;
   this.txtime = txtime;
   this.eventlevel = eventlevel;
   this.eventtype = eventtype;
   this.description = description;
}

public int getId() {
    return this.id;
}

public void setId(int id) {
    this.id = id;
}
public Date getTxtime() {
    return this.txtime;
}

public void setTxtime(Date txtime) {
    this.txtime = txtime;
}
public Integer getEventlevel() {
    return this.eventlevel;
}

public void setEventlevel(Integer eventlevel) {
    this.eventlevel = eventlevel;
}
public String getEventtype() {
    return this.eventtype;
}

public void setEventtype(String eventtype) {
    this.eventtype = eventtype;
}
public String getDescription() {
    return this.description;
}

public void setDescription(String description) {
    this.description = description;
}
}

Here is my code for the insert.

    Session session = StartupBean.sessionFactory.openSession();
    session.beginTransaction();
    Servicelog sl = new Servicelog();
    sl.setDescription("IN IT TO WIN IT");
    session.save(sl);
    session.getTransaction().commit();
    session.close();

It bombs out with the following in the glassfish server console on the session.getTransaction().commit();

Info: HHH000041: Configured SessionFactory: null WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) Info: HHH000401: using driver [org.apache.derby.jdbc.ClientDriver] at URL [jdbc:derby://localhost:1527/yayadb] Info: HHH000046: Connection properties: {user=yayaadmin, password=****} Info:
HHH000006: Autocommit mode: false Info: HHH000115: Hibernate connection pool size: 20 (min=1) Info: HHH000400: Using dialect: org.hibernate.dialect.DerbyDialect WARN: HHH000430: The DerbyDialect dialect has been deprecated; use one of the version-specific dialects instead Info: HHH000399: Using default transaction strategy (direct JDBC transactions) Info: HHH000397: Using ASTQueryTranslatorFactory Info: Loading application [yaya] at [/yaya] Info: yaya was successfully deployed in 6,323 milliseconds.

WARN: SQL Error: -1, SQLState: 42Z23

ERROR: Attempt to modify an identity column 'ID'.

Warning: StandardWrapperValve[DbTest]: Servlet.service() for servlet DbTest threw exception org.hibernate.exception.SQLGrammarException: could not prepare statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80) 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.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:196) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:96) at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.buildBatchStatement(AbstractBatchImpl.java:152) at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.getBatchStatement(AbstractBatchImpl.java:141) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3102) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3587) at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:103) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:453) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:345) 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:1218) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:421) at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101) at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177) at com.ya.ya.zzzyaya.DbTest.processRequest(DbTest.java:97) at com.ya.ya.zzzyaya.DbTest.doGet(DbTest.java:116) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) at java.lang.Thread.run(Thread.java:745)

Caused by: java.sql.SQLSyntaxErrorException: Attempt to modify an identity column 'ID'.

at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare(StatementPreparerImpl.java:103) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186) ... 45 more Caused by: org.apache.derby.client.am.SqlException: Attempt to modify an identity column 'ID'. at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source) at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source) at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source) at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source) at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown Source) at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source) at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source) at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source) ... 48 more

I've been at it for a few hours and I have no idea how to proceed. What do I have to change in hibernate so it is smart enough to not fling in a primary key?

2
define id as Integer or Long. - RP-
@Rp-that helped! Now I am getting this error: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.yaya.yyy.Servicelog at org.hibernate.id.Assigned.generate(Assigned.java:52) - bulltorious

2 Answers

1
votes

OK, I figured it out, thanks in part to Rp-'s comment

private int id;

had to be changed to

private Integer id; 

And in the Servicelog.hbm.xml

    <id name="id" type="int">
        <column name="ID" />
        <generator class="identity" />
    </id>

to

    <id name="id" type="java.lang.Integer">
        <column name="ID" />
        <generator class="assigned" />
    </id>
0
votes

Try this-

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;