次のデータベース テーブルを設計しました。
- 「materialID」を主キーとする「article」。
- 「supplierID」を主キーとする「supplier」。
- "materialID" と "supplierID" を複合主キーとして持つ "調達" (テーブル 1 と 2 への外部キーの関係を含む)。
今、私はJPAを使用してSpringでそれらを処理したいと考えています. 最初に、エンティティ「article」と「supplier」に対して機能するアプローチを示します。
エンティティ クラス:
@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 クラスは正しいですか? 複合主キーを操作するためにリポジトリ/サービスを変更する方法を知っている人はいますか?