首页 > 解决方案 > 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

标签: javaspringspring-dataspring-jdbc

解决方案


您可以为一对一关系使用@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;
}

推荐阅读