У меня ошибка при доступе к полю с JPA.Как мне это решить? - PullRequest
0 голосов
/ 12 марта 2019

При попытке вставить значения в мою таблицу я получаю эту ошибку

org.hibernate.property.access.spi.PropertyAccessException: Error accessing 
field [private int com.app.demo.model.Customer.id] by reflection for 
persistent property [com.app.demo.model.Customer#id] : 
com.app.demo.model.Customer@6d1c6e1e
javax.persistence.PersistenceException: 
org.hibernate.property.access.spi.PropertyAccessException: Error accessing 
field [private int com.app.demo.model.Customer.id] by reflection for 
persistent property [com.app.demo.model.Customer#id] : com.app.demo.model.Customer@6d1c6e1e

Это мой клиентский стол. Я использую MySql Workbench и пытаюсь вставить сюда свои значения.

Table

И я использую этот класс для вставки значений в таблицу

@Entity
@Table(name="customer")
public class Customer {

@Id
@GeneratedValue
@Column(name = "customer_id", unique = true, nullable = false)
private int id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="street_address")
private String address;
@Column(name="city")
private String city;
@Column(name="state")
private String state;
@Column(name="zip_code")
private String zipcode;
@Column(name="email")
private String email;
@Column(name="paypal_email")
private String paypalEmail;


// getters and setters

И вот как я вставляю значения в свою таблицу

// Set customer values
Customer valuedCustomer = new Customer();

valuedCustomer.setFirstName(firstName);
valuedCustomer.setLastName(lastName);
valuedCustomer.setAddress(address);
valuedCustomer.setCity(city);
valuedCustomer.setState(state);
valuedCustomer.setZipcode(zip);
valuedCustomer.setEmail(email);

// insert customer info into the customer table
EntityManagerFactory emf = Persistence.createEntityManagerFactory("pu");

EntityManager em = emf.createEntityManager();

em.getTransaction().begin();
em.persist(valuedCustomer);
em.getTransaction().commit();

EDIT:

Мой клиентский стол

customer table

Моя таблица пользователей (в этой таблице я провел модульный тест)

user table

Ответы [ 2 ]

1 голос
/ 12 марта 2019

попробуйте использовать политику AUTO или IDENTITY. как:

@GeneratedValue(strategy = GenerationType.IDENTITY)
0 голосов
/ 12 марта 2019

Вот определение поля идентификатора в вашем классе сущности

@Id
@GeneratedValue
@Column(name = "customer_id", unique = true, nullable = false)
private int id;

Здесь поле идентификатора уникально и не равно нулю . Таким образом, вы должны предоставить данные в поле ID во время вставки.

Прежде всего, использование аннотаций в качестве нашего метода конфигурации - это просто удобный метод вместо копирования бесконечного файла конфигурации XML.

Аннотация @Id наследуется от javax.persistence.Id ,, указывая, что поле элемента ниже является первичным ключом текущей сущности. Следовательно, ваш Hibernate и Spring Framework, а также вы можете сделать некоторые reflect работы на основе этой аннотации. для деталей, пожалуйста, проверьте Javadoc для Id

Аннотация @GeneratedValue предназначена для настройки пути приращения указанного столбца (поля).

Например, когда вы используете Mysql, вы можете указать auto_increment в определении таблицы, чтобы сделать его самоинкрементным, а затем использовать

@GeneratedValue(strategy = GenerationType.IDENTITY)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...