Reputation: 23
For persistent object mapped with table. Mapped class should be POJO with all the rules of Plain Old Java Object. Its setter and getter should not have any other code of initialization of object.
public class Cat {
String id;
String name;
Type type;
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
if(id != null) {
type = new Type(); //This will cause in exception org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
//ERROR 2017-03-07 00:37:30,253 [tomcat-http--22] - ERROR: cannot execute UPDATE in a read-only transaction
}
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
Exception is :-
WARN 2017-03-07 00:37:30,253 [tomcat-http--22] - SQL Error: 0, SQLState: 25006
ERROR 2017-03-07 00:37:30,253 [tomcat-http--22] - ERROR: cannot execute UPDATE in a read-only transaction
ERROR 2017-03-07 00:37:30,254 [tomcat-http--22] - Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
Why hibernate expect only POJO with strict rules? Do hibernate have any guideline for this.
It's working if I remove the code from method setId, only kept assignment of I'd.
Upvotes: 0
Views: 365
Reputation: 939
Looks like you have somewhere marked method as @Transactional(readonly=true)
Upvotes: 1