Spring data jdbc-特定连接,特定映射

问题描述 投票:0回答:2

我有以下两个表:

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 /休眠

java spring spring-data spring-jdbc
2个回答
0
投票

一种解决方法是执行以下操作:

@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上加入

但是,这看起来不是很好的解决方法。


0
投票

您可以将@ 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.