我的项目有3个模型和1个表对多关系:
@Embeddable
@Getter
@Setter
public class ProductWarehouseId implements Serializable {
@Column(name = "warehouse_Id")
private Long warehouseId;
@Column(name = "product_Id")
private Long productId;
@Column(name = "user_Id")
private Long userId;
public ProductWarehouseId() {
}
public ProductWarehouseId(Long warehouseId, Long productId, Long userId) {
this.warehouseId = warehouseId;
this.productId = productId;
this.userId = userId;
}
}
---------------------------------------------------
@Entity
@NoArgsConstructor
@Getter
@Setter
public class ProductWarehouse {
@EmbeddedId
ProductWarehouseId productWarehouseId;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("productId")
@JoinColumn(name = "product_id")
ProductEntity product ;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("warehouseId")
@JoinColumn(name = "warehouse_id")
WarehouseEntity warehouse ;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("userId")
@JoinColumn(name = "user_id")
UserEntity userEntity;
@Column(name = "stockAmount")
private Long stockAmount;
@Column(name = "transctionDate")
@Temporal(TemporalType.TIMESTAMP)
private Date transactionDate = new Date();
public ProductWarehouse(ProductEntity product, UserEntity user) {
this.product = product;
this.userEntity = user;
}
}
********************************************************
@Getter
@Setter
@Entity
@RequiredArgsConstructor
public class ProductEntity extends BaseEntity{
@OneToMany(mappedBy = "product",cascade = CascadeType.ALL)
private Set<ProductWarehouse> productWarehouses;
//And more veriables
}
------------------------------------
@Getter
@Setter
@Entity
public class WarehouseEntity extends BaseEntity{
@OneToMany(mappedBy = "warehouse",cascade = CascadeType.ALL)
private Set<ProductWarehouse> productWarehouses = new HashSet<>();
//and more veriables
}
当我试图从product\u warehouse表中选择list进行更改时,有一些例外。我想用fromid和toid在仓库之间转移产品
我在服务类中使用此方法:
@Override
@Transactional
public void transfer(Long fromId, Long toId) {
WarehouseEntity warehouseEntity = warehouseCRUDRepository.getOne(fromId);
WarehouseEntity warehouseEntity1 = warehouseCRUDRepository.getOne(toId);
if (warehouseEntity.getStatus().equals(WarehouseStatus.ACTIVE) && warehouseEntity1.getStatus().equals(WarehouseStatus.ACTIVE)){
Collection<ProductWarehouse> productWarehouses = em
.createNativeQuery("select c from product_warehouse c where c.warehouse_id =:fromId")
.setParameter("fromId",fromId)
.getResultList();
for (ProductWarehouse p : productWarehouses){
p.getProductWarehouseId().setWarehouseId(toId);
p.setWarehouse(warehouseCRUDRepository.getOne(toId));
}
}
}
例外情况是:
路径为[]的上下文中servlet[dispatcherservlet]的servlet.service()引发异常[请求处理失败;嵌套的异常是javax.persistence.persistenceexception:org.hibernate.mappingexception:no dialect mapping for jdbc type:2002]带有根本原因。
你能帮我一下吗。我为我的英语感到抱歉,谢谢你。
1条答案
按热度按时间ztigrdn81#
ProductWarehouse
已经有了Warehouse
在这篇文章中,我不明白为什么要再次设置它,从for循环中的db获取它。我看不出在该方法中有任何for循环的必要性,正如您上面所描述的,您还没有在任何地方定义多对多关系。在构建关系时,可以使用连接表,如下所述
如果您需要更多信息,请分享您的需要和您面临的错误的更多细节。