PropertyAccessException:发生IllegalArgumentException调用对象的getter方法

时间:2020-05-22 17:38:32

标签: java hibernate spring-boot

在带有Spring Boot 2.2.7的休眠5.4版本中。我在例外之下。

Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of <Project path>.models.Book.isbn
    at org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:65)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:223)
    at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:5119)
    at org.hibernate.id.Assigned.generate(Assigned.java:31)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:115)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:194)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:179)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:75)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:626)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:619)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:614)
    at com.vikas.projects.organicecommerce.jpahibernate.QueryExcecutableFile.test(QueryExcecutableFile.java:29)
    at com.vikas.projects.organicecommerce.jpahibernate.OrganicEcommerceJpaHibernateApplication.main(OrganicEcommerceJpaHibernateApplication.java:21)
    ... 5 more
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:42)

我检查了其他相关链接,但是我无法将其与我的用例链接。 我正在使用以下配置和模型来保留Book对象。

Book.java

package com.vikas.projects.organicecommerce.jpahibernate.models;

import java.math.BigDecimal;
import java.sql.Date;

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Book {
    private String isbn;
    private String name;
    private Date publishdate;
    private BigDecimal price;

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getPublishdate() {
        return publishdate;
    }

    public void setPublishdate(Date publishdate) {
        this.publishdate = publishdate;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }
}


book.hbm.xml

<hibernate-mapping>
    <class name="...Book"
        table="BOOK" lazy="false">
        <id name="isbn">
            <column name="ISBN" sql-type="varchar(13)" not-null="true" />
        </id>
        <property name="name">
            <column name="NAME" sql-type="varchar(64)" not-null="true"
                unique="true" />
        </property>
        <property name="publishdate">
            <column name="PUBLISHDATE" sql-type="date" />
        </property>
        <property name="price">
            <column name="PRICE" sql-type="decimal" precision="8"
                scale="2" />
        </property>
    </class>
</hibernate-mapping>

hibernate.cfg.xml

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class"></property>
        <property name="connection.url"></property>
        <property name="connection.username"></property>
        <property name="connection.password"></property>
        <property name="hibernate.dialect"></property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping
            resource=".../Book.hbm.xml" />
    </session-factory>
</hibernate-configuration>

持久化此对象的方法

public void test() {
        Book book = new Book();
        book.setIsbn("1232424");
        book.setName("BookName");
        book.setPrice(new BigDecimal(23.00));
        book.setPublishdate(Date.valueOf("2014-04-04"));
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.persist(book);
        tx.commit();
        session.close();

    }

我正在使用Microsoft SQL Server。如果需要更多详细信息,请告诉我。

添加更多详细信息。从主函数中,我通过QueryExecutableFile的实例调用test()。

@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class OrganicEcommerceJpaHibernateApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrganicEcommerceJpaHibernateApplication.class, args);
        QueryExcecutableFile queryExcecutableFile = new QueryExcecutableFile(getSessionFactory());
        queryExcecutableFile.test();
    }

    public static SessionFactory getSessionFactory() {
        Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        return sessionFactory;
    }

}
public class QueryExcecutableFile {


    SessionFactory sessionFactory;

    public QueryExcecutableFile(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public void test() {
        Book book = new Book();
        book.setIsbn("1232424");
        book.setName("BookName");
        book.setPrice(new BigDecimal(23.00));
        book.setPublishdate(Date.valueOf("2014-04-04"));
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.persist(book);
        tx.commit();
        session.close();

    }

}

0 个答案:

没有答案