gpt4 book ai didi

java - 具有复合主键的 JPA 存储库/服务设计

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:33 24 4
gpt4 key购买 nike

我设计了以下数据库表:

  1. 以“materialID”为主键的“article”。
  2. 以“supplierID”作为主键的“供应商”。
  3. 以“ Material ID”和“供应商 ID”作为复合主键的“采购”(包括与表 1 和表 2 的外键关系)。

现在我想在 Spring 中使用 JPA 处理它们。首先,我将演示适用于实体“商品”和“供应商”的方法。

实体类:

@Entity
public class Article {
@Id
private String materialID;

@Column(nullable = false)
private String shortText; }

实体的 JpaRepository:

@Repository
public interface IArticleRepository extends JpaRepository<Article, String>
{
List<Article> findByShortTextLike(String shortText); //just another search method
}

向用户提供交易的服务:

@Service
public class ArticleService implements IArticleService {

@Autowired
private IArticleRepository articleRepository;

@Override
@Transactional(readOnly = true)
public Article getArticleByID(String id) {
return this.articleRepository.findOne(id);
}

@Override
@Transactional
public Article createArticle(String id, String shortText) {
Article article = new Article();
article.setMaterialID(id);
article.setShortText(shortText);
this.articleRepository.save(article);
return article;
}

不幸的是,这个系统似乎不能为“采购”实体正常工作。我已经阅读了复合主键挑战并编写了这个实体类。

@Entity
@Table
public class Procurement implements Serializable {

private static final long serialVersionUID = 4976268749443066505L;

@EmbeddedId
private ProcId pk;

嵌入 id 的类如下所示。

@Embeddable
public class ProcId implements Serializable {

private String materialID;

private int supplierID;
}

实体和 ID 类是否正确?有谁知道如何更改存储库/服务以便使用复合主键?

最佳答案

您的 ProcId 应该这样定义:

@Embeddable
public class ProcId implements Serializable {
@ManyToOne(optional = false)
private Article article;
@ManyToOne(optional = false)
private Supplier supplier;
}

关于java - 具有复合主键的 JPA 存储库/服务设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15850064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com