Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA表到实体的转换不正确_Java_Mysql_Jpa - Fatal编程技术网

Java JPA表到实体的转换不正确

Java JPA表到实体的转换不正确,java,mysql,jpa,Java,Mysql,Jpa,我在这里试图实现的是使用SpringJPA启动一个sql查询,并获取返回的Entite,然后在ay结构中转换对象 问题是,当两个表和实体具有相同的列时,JPA无法区分这些属性的值,并将错误的值映射到实体,以下是我的代码: DAO public class EMIDao implements IEMIDao { @Autowired private EntityManager entityManager; @Override public List<EMI

我在这里试图实现的是使用SpringJPA启动一个sql查询,并获取返回的Entite,然后在ay结构中转换对象

问题是,当两个表和实体具有相同的列时,JPA无法区分这些属性的值,并将错误的值映射到实体,以下是我的代码:

DAO

public class EMIDao implements IEMIDao {

    @Autowired
    private EntityManager entityManager;

    @Override
    public List<EMI> fetch(Integer month) {
        Query query = entityManager.createNativeQuery(
                "SELECT DISTINCT e.*, p.*, l.*, i.* FROM emi e JOIN loan l ON l.loan_id = e.loan_id LEFT JOIN product p ON p.product_id = l.product_id LEFT JOIN item i ON i.product_id = p.product_id LEFT JOIN item_return ir ON ir.item_id = i.item_id WHERE e.date = ?1 AND ir.item_return_id IS NULL",
                "EMIProductDTO");
        query.setParameter(1, "2020-" + month + "-16");
        List<Object[]> objects = query.getResultList();

        return EMITransformer.transform(objects);
    }

}
产品实体

@Entity
@Table(name = "product")
@SqlResultSetMapping(name = "ProductItemDTO", entities = { @EntityResult(entityClass = Product.class),
        @EntityResult(entityClass = Item.class) })
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "product_id")
    private Integer id;
    @Column(name = "order_number")
    private String orderNumber;
    @Column(name = "product_type")
    private String type;
    @Column(name = "price")
    private Integer price;
    @Column(name = "created_on")
    private Timestamp createdOn;
@Entity
@Table(name = "item")
public class Item {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "item_id")
    private Integer id;
    @Column(name = "type")
    private String type;
    @Column(name = "brand")
    private String brand;
    @Column(name = "price")
    private Integer price;
    @Column(name = "product_id")
    private Integer productId;
    @Column(name = "created_on")
    private Timestamp createdOn;
项目实体

@Entity
@Table(name = "product")
@SqlResultSetMapping(name = "ProductItemDTO", entities = { @EntityResult(entityClass = Product.class),
        @EntityResult(entityClass = Item.class) })
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "product_id")
    private Integer id;
    @Column(name = "order_number")
    private String orderNumber;
    @Column(name = "product_type")
    private String type;
    @Column(name = "price")
    private Integer price;
    @Column(name = "created_on")
    private Timestamp createdOn;
@Entity
@Table(name = "item")
public class Item {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "item_id")
    private Integer id;
    @Column(name = "type")
    private String type;
    @Column(name = "brand")
    private String brand;
    @Column(name = "price")
    private Integer price;
    @Column(name = "product_id")
    private Integer productId;
    @Column(name = "created_on")
    private Timestamp createdOn;

每件事都按预期进行,我无法改变使用onetoonemapping注释的方法,只希望jpa正确地映射价格字段。非常感谢您的帮助。提前谢谢。

您是否尝试过为列添加别名?p、 价格为产品价格,即价格为商品价格……然后我必须指定查询中的每一列,我将更多地查看hibernate addEntity的行>>