Java JPA表到实体的转换不正确
我在这里试图实现的是使用SpringJPA启动一个sql查询,并获取返回的Entite,然后在ay结构中转换对象 问题是,当两个表和实体具有相同的列时,JPA无法区分这些属性的值,并将错误的值映射到实体,以下是我的代码: DAOJava 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
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的行>>