У меня есть две сущности Order
и Customer
. Order
имеет отношения @ManyToOne
с Customer
. Однако, когда я объявляю следующий запрос JPQL, я получаю SQLSyntaxErrorException
, потому что в сгенерированном SQL отсутствует условие ON
.
JPQL:
SELECT o.id,
o.incrementId,
o.externalId,
o.state,
o.status,
o.couponCode,
o.totalDiscount,
o.total,
o.originChannel,
o.branchOffice,
o.createdAt,
o.updatedAt,
c.fullName
FROM Order o
JOIN FETCH Customer c;
Сгенерированный SQL:
select order0_.id as col_0_0_,
order0_.increment_id as col_1_0_,
order0_.external_id as col_2_0_,
order0_.state as col_3_0_,
order0_.status as col_4_0_,
order0_.coupon_code as col_5_0_,
order0_.total_discount as col_6_0_,
order0_.total as col_7_0_,
order0_.origin_channel as col_8_0_,
order0_.branch_office as col_9_0_,
order0_.created_at as colon
0_,
order0_.updated_at as col@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "customer_id", referencedColumnName = "id", table = "orders")
private Customer customer;
public Customer getCustomer() {
return customer;
}
}
0_,
customer1_.full_name as colList<Order>
0_
from orders order0_
inner join customers customer1_ on;
Как видите, здесь отсутствует условие on
. Я нахожу это странным, потому что это мои сущности:
Порядок (для краткости нерелевантные свойства опущены)
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "customer_id", referencedColumnName = "id", table = "orders")
private Customer customer;
public Customer getCustomer() {
return customer;
}
}
Клиент (для краткости нерелевантные свойства опущены)
Мой вариант использования не требует наличия List<Order>
в объекте Customer
(я пытался добавить его, но это все равно не решает проблему.
@Entity
@Table(name = "customers")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Отношения между этими двумя сущностями правильные, потому что они работают, как и ожидалось, когда дело доходит до вставки, обновления и извлечения обычными средствами. Я что-то упустил здесь?