iam Наивный пользователь, работающий над Spring Boot., Создавая отношения с OttoMany с пользователем (родитель) -> Адрес (ребенок). < /p>
Пост работает (создание пользователя работает ) < /p>
Невозможно обновить запись пользователя на почте, попытался искать в Интернете, но ни одно из решений не сработало для меня. < /p>
Вот мой код < /p>
User.java
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// @JsonIgnore
@JsonManagedReference
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private List addresses;
// Getters and setters
}
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String street;
private String city;
private String state;
private String zip;
@JsonBackReference
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
// Getters and setters
}
UserController.java
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
User existingUser = userService.getUser(id);
existingUser.setName(user.getName());
existingUser.setAddresses(user.getAddresses());
return userService.updateUser(existingUser);
}
userService.java
public User updateUser(User user) {
return userRepository.save(user);
}
**OutPut**
org.hibernate.TransientObjectException: persistent instance references an unsaved transient instance of 'com.clt.product_service.entity.User' (save the transient instance before flushing)
at org.hibernate.engine.spi.CascadingActions$9.cascade(CascadingActions.java:382) ~[hibernate-core-6.6.4.Final.jar:6.6.4.Final]
at org.hibernate.engine.spi.CascadingActions$9.cascade(CascadingActions.java:372) ~[hibernate-core-6.6.4.Final.jar:6.6.4.Final]
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:570) ~[hibernate-core-6.6.4.Final.jar:6.6.4.Final]
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:492) ~[hibernate-core-6.6.4.Final.jar:6.6.4.Final]
< /code>
почтальон - вывод < /p>
"timestamp": "2025-02-20T20:35:11.402+00:00",
"status": 500,
"error": "Internal Server Error",
"trace": "org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientObjectException: persistent instance references an unsaved transient instance of 'com.clt.product_service.entity.User' (save the transient instance before flushing)\r\n\tat org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:368)\r\n\tat org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:246)\r\n\tat org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.
< /code>
Обновлено код, как предложено ниже < /p>
public User updateUser(@PathVariable Long id, @RequestBody User user) {
User existingUser = userService.getUser(id);
existingUser.setName(user.getName());
existingUser.setAddresses(user.getAddresses().stream()
.map(address -> {
address.setId(null);
address.setUser(existingUser);
return address;
})
.toList());
return userService.updateUser(existingUser);
}
< /code>
Теперь обширная ошибка как < /p>
"timeStamp": "2025-02-21t03: 47: 47.749+00: 00",
«Статус»: 500,
«ошибка»: «Ошибка внутреннего сервера»,
«трассировка»: "java.lang.unsupportedOperationException \ r \ n \ tat java.base/java.util.imtablecollections.uoe (immutablecollections.java:142) \ r \ n \ tat java.base/java.util.immutablecollections $ AbstractImmutableCollection.clear (ImmutableCollections.java:149) \ r \ n \ tat org.hibernate.type.collectiontype.replaceElements (collectype.java:506) \ r \ n \ tat org. hibernate.type.
Подробнее здесь: https://stackoverflow.com/questions/794 ... ot-working