'Hibernate - IllegalArgumentException occurred calling getter of
I have a super simple app (just a first try with Hibernate) with this schema:
DROP DATABASE IF EXISTS deubor;
CREATE DATABASE IF NOT EXISTS deubor DEFAULT CHARACTER SET = utf8;
USE deubor;
SET character_set_client = utf8;
CREATE TABLE INSTRUMENT (
ID INTEGER NOT NULL AUTO_INCREMENT,
ISIN VARCHAR(12) DEFAULT '' NOT NULL,
ISSUERNAME VARCHAR(200) DEFAULT '' NOT NULL,
APPTYPE VARCHAR(20) DEFAULT '' NOT NULL,
INSTYPE VARCHAR(20) DEFAULT '' NOT NULL,
MDATE INTEGER DEFAULT '0' ,
PRIMARY KEY(ID)
);
I've generated the Hibernate Entity and it produces the following:
@Entity
@Table(name = "instrument")
public class Instrument {
private int id;
private String isin;
private String issuername;
private String apptype;
private String instype;
private Integer mdate;
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Basic
@Column(name = "ISIN")
public String getIsin() {
return isin;
}
public void setIsin(String isin) {
this.isin = isin;
}
@Basic
@Column(name = "ISSUERNAME")
public String getIssuername() {
return issuername;
}
public void setIssuername(String issuername) {
this.issuername = issuername;
}
@Column(name = "APPTYPE")
public String getApptype() {
return apptype;
}
public void setApptype(String apptype) {
this.apptype = apptype;
}
@Basic
@Column(name = "INSTYPE")
public String getInstype() {
return instype;
}
public void setInstype(String instype) {
this.instype = instype;
}
@Basic
@Column(name = "MDATE")
public Integer getMdate() {
return mdate;
}
public void setMdate(Integer mdate) {
this.mdate = mdate;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Instrument that = (Instrument) o;
return id == that.id &&
Objects.equals(isin, that.isin) &&
Objects.equals(issuername, that.issuername) &&
Objects.equals(apptype, that.apptype) &&
Objects.equals(instype, that.instype) &&
Objects.equals(mdate, that.mdate);
}
public Instrument(String isin, String issuername, String apptype, String instype, Integer mdate) {
this.isin = isin;
this.issuername = issuername;
this.apptype = apptype;
this.instype = instype;
this.mdate = mdate;
}
@Override
public int hashCode() {
return Objects.hash(id, isin, issuername, apptype, instype, mdate);
}
}
hibernate.cfg.xml :
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/demo</property>
<property name="connection.username">username</property>
<property name="connection.password">password</property>
<property name="show_sql">true</property>
<mapping class="com.mm.prep.demo.model.Instrument" />
</session-factory>
</hibernate-configuration>
Calling code with initialised object:
@GetMapping("/")
public String home(Model model) {
InstrumentManager im = new InstrumentManager();
Instrument i = new Instrument("XCVBFT", "Issuer 1", "INCLUSION", "BOND", null);
im.setup();
im.save(i);
return "instruments";
}
Code called in InstrumentManager:
public void setup() {
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure() // configures settings from hibernate.cfg.xml
.build();
try {
sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
} catch (Exception ex) {
StandardServiceRegistryBuilder.destroy(registry);
}
}
public void save(Instrument i) {
Session s = sessionFactory.openSession();
s.beginTransaction();
s.save(i);
s.getTransaction().commit();
s.close();
}
But when I try to save I get the following stacktrace. I mean this app can't get any simpler... what am I doing wrong?
IllegalArgumentException occurred calling getter of com.mm.prep.demo.model.Instrument.apptype
org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.mm.prep.demo.model.Instrument.apptype
at org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:64)
at org.hibernate.property.access.spi.GetterMethodImpl.getForInsert(GetterMethodImpl.java:76)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValuesToInsert(AbstractEntityTuplizer.java:619)
at org.hibernate.tuple.entity.PojoEntityTuplizer.getPropertyValuesToInsert(PojoEntityTuplizer.java:225)
at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValuesToInsert(AbstractEntityPersister.java:4793)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:254)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:182)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:113)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
