У меня проблема, которой у меня никогда не было.В основном у меня есть 2 объекта: Orders и Recip (и соответствующие им классы Java).Между ними есть отношение @OneToMany (Рецепту принадлежит отношение) и @ManyToOne (в Заказах).Логика этого отношения - создать новый ордер, вставив FK (rece_id) в запись.Проблема, которая возникает, заключается в том, что я могу делать такую логику с помощью SQL-запросов, но это невозможно при совместном использовании Angular и Spring.Мой код выглядит так: Приказы:
package tk.jewsbar.jwtauth.app.model;
import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import java.sql.Timestamp;
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property="@orders_id")
@JsonInclude(JsonInclude.Include.NON_NULL)
@Entity
public class Orders {
@Id
@GeneratedValue
private Long orders_id;
@Basic
private Timestamp date;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "recip_recip_id", nullable = false)
public Recip recip;
public Long getOrders_id() {
return orders_id;
}
public void setOrders_id(Long orders_id) {
this.orders_id = orders_id;
}
public Timestamp getDate() {
return date;
}
public void setDate(Timestamp date) {
this.date = date;
}
public Recip getRecip() {
return recip;
}
public void setRecip(Recip recip) {
this.recip = recip;
}
}
Рецепт:
package tk.jewsbar.jwtauth.app.model;
import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Set;
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property="@recip_id")
@JsonInclude(JsonInclude.Include.NON_NULL)
@Entity
@Table(name = "recip")
public class Recip {
@Id
@GeneratedValue
public Long recip_id;
@NotNull
private double quantity;
@NotNull
private double price;
private double quantity_item;
private String name;
@OneToMany(mappedBy = "recip", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Orders> orders;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "storeitem_storeitem_id", nullable = false)
private StoreItem storeItem;
public Long getRecip_id() {
return recip_id;
}
public void setRecip_id(Long recip_id) {
this.recip_id = recip_id;
}
public double getQuantity() {
return quantity;
}
public void setQuantity(double quantity) {
this.quantity = quantity;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getQuantity_item() {
return quantity_item;
}
public void setQuantity_item(double quantity_item) {
this.quantity_item = quantity_item;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Orders> getOrders() {
return orders;
}
public void setOrders(Set<Orders> orders) {
this.orders = orders;
}
public StoreItem getStoreItem() {
return storeItem;
}
public void setStoreItem(StoreItem storeItem) {
this.storeItem = storeItem;
}
}
И Угловой copmonent.ts:
orders: Orders[];
recips: Recip[];
order: Orders = new Orders();
constructor(
private route: ActivatedRoute,
private ordersService: OrdersService,
private router: Router,
) { }
ngOnInit() {
this.ordersService.getRecips().subscribe(
data => {
this.recips = data;
});
}
ifShow() {
this.show = !this.show;
}
createOrders(): void {
this.ordersService.addOrders(this.order)
.subscribe( data => {
window.location.reload();
});
console.log('recip_ID: ' + this.order['recip_id']);
console.log(this.order);
}
}
Наконец component.html:
<select class="form-control" [(ngModel)]="order" placeholder="id" name="id" id="id">
<option *ngFor="let item of recips"
[ngValue]="item">
{{ item.name }}
</option>
</select>
<br><br><br>
<button class="btn btn-success" (click)="createOrders()">Save</button>
Ошибка, которую я получаю:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Столбец 'receive_recip_id' не может быть нулевым
Я не понимаю, потому что "rec_recip_id" - это значение, которое я вставляю в таблицу (другие столбцы в таблице "Orders" являются AI или могут быть нулевыми)