Возможно, стоит отметить, что это школьный проект, а не настоящая серверная часть, которая будет размещена. в производство. И база данных, и внешний интерфейс были предоставлены мне и поэтому наверняка находятся в рабочем состоянии.
Соответствующими классами сущностей являются Customer, Cart, CartItem и Excursion. Экскурсии и CartItems имеют отношение многие-ко-многим, которое определяется следующим образом:
Код: Выделить всё
@Entity(name="cart_items")
public class CartItem {
@Id
@Column(name="cart_item_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
// ...
@ManyToMany
@JoinTable(name="excursion_cartitem",
joinColumns = {@JoinColumn(name="cart_item_id")},
inverseJoinColumns = {@JoinColumn(name="excursion_id")}
)
@Getter
@Setter
private Set excursions = new HashSet();
}
Код: Выделить всё
@Entity(name="excursions")
public class Excursion {
@Id
@Column(name="excursion_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
// ...
@ManyToMany(mappedBy="excursions")
private Set cartItems = new HashSet();
}
Код: Выделить всё
@RestController
@CrossOrigin
public class CheckoutController {
// ...
@PostMapping("...")
@Transactional
public ResponseEntity
checkout(@RequestBody PurchaseData purchaseData) {
String orderTrackingNumber = "#################";
purchaseData.setCartOrderTrackingNumber(orderTrackingNumber);
// Adds the Customer to the Cart, and the Cart to all the CartItems.
purchaseData.resolveConnections();
cartDao.save(purchaseData.getCart());
cartItemDao.saveAll(purchaseData.getCartItems());
PurchaseResponse response = new PurchaseResponse();
response.setOrderTrackingNumber(orderTrackingNumber);
return ResponseEntity.ok(response);
}
}
Код: Выделить всё
Hibernate: insert into cart_items (cart_id,create_date,last_update,vacation_id) values (?,?,?,?)
2024-07-14T20:21:07.470-04:00 TRACE 3740 --- [nio-8080-exec-2] org.hibernate.orm.jdbc.bind : binding parameter (1:BIGINT)
Подробнее здесь: [url]https://stackoverflow.com/questions/78747713/spring-data-jpa-inserting-foreign-key-that-does-not-match-the-primary-key-insert[/url]