我设计了以下数据库表:
- 以“materialID”为主键的“article”。
- 以“supplierID”为主键的“supplier”。
- 以“materialID”和“supplierID”作为复合主键的“采购”(包括与表 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 类是否正确?有谁知道如何更改存储库/服务以使用复合主键?