Я использую следующие технологии для моего веб-приложения:
- Пружина загрузки 2.0
- Hibernate 5.x
- postgresql для базы данных
Краткий обзор потока веб-приложений:
1- Когда клиент регистрируется, он сохраняет сущность клиента в базе данных (таблица клиентов)
2- Только после регистрации клиент может сохранить груз. Таким образом, сущность клиента всегда будет присутствовать в таблице клиентов при добавлении груза.
3- Отгрузка -> Клиент является партнером ManyToOne
При попытке сохранить объект отгрузки в базе данных я получаю следующее исключение:
org.springframework.orm.jpa.JpaSystemException: Error accessing field [private java.lang.String com.logistics.dao.model.Customer.email] by reflection for persistent property [com.logistics.dao.model.Customer#email] : abc@gmail.com; nested exception is org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.S`enter code here`tring com.logistics.dao.model.Customer.email] by reflection for persistent property [com.logistics.dao.model.Customer#email] : abc@gmail.com
Может кто-нибудь помочь мне с этим? Нужно ли переходить на Hibernate 4.x, как описано здесь
Вот код для справки:
Отгрузка:
@Entity
@Table(name = "shipment")
public class ShipmentDB {
@Id
@Column(name = "shipment_id")
private String shipmentId;
@ManyToOne(targetEntity = Customer.class)
@JoinColumn(name = "email")
private String email;
@Column(name = "from_address_id")
private String fromAddressId;
@Column(name = "to_address_id")
private String toAddressId;
public String getShipmentId() {
return shipmentId;
}
public void setShipmentId(String shipmentId) {
this.shipmentId = shipmentId;
}
public String getFromAddressId() {
return fromAddressId;
}
public void setFromAddressId(String fromAddressId) {
this.fromAddressId = fromAddressId;
}
public String getToAddressId() {
return toAddressId;
}
public void setToAddressId(String toAddressId) {
this.toAddressId = toAddressId;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Заказчик:
@Entity
@Table(name = "customer")
public class Customer {
@Id
@Column(name = "email")
private String email;
@Column(name = "password")
@Transient
private String password;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
ShipmentRepository:
@Repository()
public interface ShipmentRepository extends JpaRepository<ShipmentDB, Long> {
ShipmentDB findByShipmentId(String shipmentId);
}
ShipmentService:
@Service("shipmentService")
public class ShipmentService {
@Autowired
private ShipmentRepository repository;
public ShipmentDB findShipmentById(String shipmentId) {
return repository.findByShipmentId(shipmentId);
}
public void saveShipment(ShipmentDB shipment) {
repository.save(shipment);
}
}
Спасибо.