java - Spring data jdbc - 具体的join,具体的映射
问题描述
我有以下两个表:
Customer
id
name
Order
id
product_name
customer_id
具有 1 对 1 的关系
和 java 实体:
@Data
public class Customer{
@Id
private Long id;
private String name;
}
@Data
public class Order{
@Id
private Long id;
@Column("id")
private Customer customer; //i want to somehow map this
private String productName;
}
和一个控制器
@Controller
public class MyController{
//...
@GetMapping("/")
public String getmap(Model m){
System.out.println(repository.findAll()) //prints "nullrows" due to wrong sql statement
return "mytemplate";
}
}
我当前的问题是,spring 正在执行以下 sql 语句:
SELECT Order.id, Order.product_name, Customer.id, Customer.name
FROM Order LEFT OUTER JOIN Customer ON Customer.id = Order.id
我真正想要的是Customer.id = Order.customer_id
在离开课程的同时加入,即客户参考需要保持秩序。
我已经尝试了迄今为止我能找到的所有注释,但没有取得任何进展。
编辑:
我不允许使用 jpa/hibernate
解决方案
您可以为一对一关系使用@OneToOne和@JoinColumn注释:
@Data
public class Customer{
@Id
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "order_id", referencedColumnName = "id")
private Order order;
}
@Data
public class Order{
@Id
@Column(name = "id")
private Long id;
@Column(name = "product_name")
private String productName;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "customer_id", referencedColumnName = "id")
private Customer customer;
}
推荐阅读
- java - 为什么这段代码在 if 语句中给我错误
- android - Kotlin 中的 OTP 输入 - 库 android-otpview-pinview
- python - Python数据框搜索另一个数据框
- visual-studio-code - 如何完全断开 VSCode 访问互联网的连接?
- python-3.x - 从列表和 2D 列表一起创建一个 DataFrame
- python-3.x - 在带有时间戳索引的数据框中创建一个 12 小时的循环
- python - 无法从数据库 GET /favicon.ico HTTP/1.1 获取数据
- php - 使用 PHP 从 MySQL 向所有电子邮件地址发送电子邮件
- visual-studio - dtls 握手失败并出现警报解密错误
- c# - 从控制器外部获取动作的虚拟路径