I have a table which an identity column and a primary key.
CREATE TABLE &LIB/TABLE_STATE
(
ROWID NUMERIC(16)
UNIQUE GENERATED ALWAYS AS IDENTITY (CACHE 20 CYCLE ORDER),
USERID CHAR(10) NOT NULL,
CODE_TYPE VARCHAR(20) NOT NULL,
PRIMARY KEY (USERID, CODE_TYPE),
);
Code:
@Entity
@Table(name = "TABLE_STATE")
public class TableState implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ROWID", nullable = false, length = 255)
private Long rowId;
@EmbeddedId
@GeneratedValue(strategy = GenerationType.AUTO)
private TableStateKey tableStateKey;
}
Code:
@Embeddable
public class TableStateKey implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "USERID", nullable = false, length = 10)
@Type(type = "trimString")
private String userId;
@Column(name = "CODE_TYPE", nullable = false, length = 20)
@Type(type = "trimString")
private String codeType;
}
When i perform an object persist using entity manager, it throws the below error.
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of TableState.rowId
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1235)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1168)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1174)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:674)
at Main.method(Main.java:70)
at Main.main(Main.java:17)
Caused by: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of TableState.rowId
at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:151)
at org.hibernate.mapping.Component$ValueGenerationPlan.execute(Component.java:438)
at org.hibernate.id.CompositeNestedGeneratedValueGenerator.generate(CompositeNestedGeneratedValueGenerator.java:122)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:122)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:800)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:774)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:778)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:668)
... 2 more
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field TableState.rowId to org.hibernate.id.IdentifierGeneratorHelper$2
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
at java.lang.reflect.Field.set(Field.java:657)
at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:139)
... 13 more