我有以下两个表:
Customer
id
name
Order
id
product_name
customer_id
具有一对一关系
和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";
}
}
我当前的问题是,那个春天正在执行以下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 /休眠
一种解决方法是执行以下操作:
@Data
public class Customer{
@Id
private Long id;
private String name;
}
@Data
public class Order{
@Id
private Long customerId;
private Long id;
@Column("id")
private Customer customer; //i want to somehow map this
private String productName;
}
使它自动在Customer.id = Order.customer_id
上加入
但是,这看起来不是很好的解决方法。
您可以将@ 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;
}