【发布时间】:2019-07-02 12:03:59
【问题描述】:
我有产品和代码实体,我为它们建立了多对多关系,所以它将是 Product_Code
所以 Product_Code 将有 product_id 和 product_id
我真的很想通过代码从产品中获取数据,但是我想要的结果我也想要产品值和代码值的详细信息,我不知道如何在 JPA 上做到这一点
我想先获取产品代码,然后在 Product_Code 表中找到该 id 的 id 产品,然后从中获取数据并在代码实体上再次找到代码的 id, 我确信有办法为此获取数据,但我不知道如何,我确实喜欢用简单的方法来了解它是如何工作的
我是新手
我的实体产品是这样的
@Entity
@Table(name = "PRODUCT")
@Setter
@Getter
@DynamicUpdate
public class Product extends Base {
@ManyToMany(mappedBy = "products", fetch = FetchType.EAGER)
private Set<Code> codes;
@Column(name = "NAME", nullable = false)
private String Name;
@Column(name = "DESCRIPTION")
private String description;
public int hasCode() {
return Objects.hashCode(getId());
}
}
这是我的代码实体:
@Entity
@Table(name = "CODE")
@DynamicUpdate
@Setter
@Getter
public class Voucher extends Base {
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name = "PRODUCT_CODE",
joinColumns = @JoinColumn(name = "CODE_ID"),
inverseJoinColumns = @JoinColumn(name = "PRODUCT_ID"))
private Set<Product> products;
@Column(name = "CODE", unique = true)
private String codeName;
@Column(name = "TYPE", nullable = false)
private String type;
private String descriptions;
public int hasCode() {
return Objects.hashCode(getId());
}
}
当我尝试通过代码查找时,我真的很想获取所有数据 假设我想找到一个代码像“A7”的产品,所以我想从产品实体中获取,然后我会得到详细的代码实体,也像那个产品一样带有 product_id 和 code_id
当我尝试 Product findByCode(String code) 或 Product findOneByCode(String code)
结果是我扩展的Base 实体而不是产品实体,
Base 实体是可重用的实体,例如 generate id, token, createdAt, deletedAt, updatedAt
【问题讨论】:
-
你要根据具体的Voucher.codeName获取List
吗? -
是的,这可能吗?
-
我试过这个 "SELECT p.name , v.code " + " from Product p " + " INNER JOIN ProductCode cp ON p.id = cp.productId " + " INNER JOIN Code v on v.id = cp.codeId WHERE v.code = ?1" 但失败
-
是的,我建议您使用
JpaSpecificationExecutor存储库和CriteriaBuilder.isMember函数。通过 id 选择Code并将其传递给 isMember 函数。 -
你有例子吗?我不是按id找的,我要按code的名字找
标签: java spring hibernate spring-boot jpa