JPA Référentiel / Service de conception avec les clés primaires composites
J'ai conçu ces tables de base de données:
- "article" avec "materialID" comme clé primaire.
- "fournisseur" avec "n ° fournisseur" comme clé primaire.
- "approvisionnement" avec "materialID" et "n ° de fournisseur" comme clé primaire composite (y compris les relations de clé étrangère pour les tableaux 1 et 2).
Maintenant, je veux traiter avec eux au Printemps à l'aide de JPA. Tout d'abord, je vais présenter l'approche de travail pour les entités "article" et "fournisseur".
Classe d'entité:
@Entity
public class Article {
@Id
private String materialID;
@Column(nullable = false)
private String shortText; }
JpaRepository pour l'entité:
@Repository
public interface IArticleRepository extends JpaRepository<Article, String>
{
List<Article> findByShortTextLike(String shortText); //just another search method
}
De la fourniture de services de transactions à l'utilisateur:
@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;
}
Malheureusement, ce système ne semble pas fonctionner correctement pour les "achats" de l'entité.
J'ai déjà lu à propos de la clé primaire composite défi et a écrit cette classe d'entité.
@Entity
@Table
public class Procurement implements Serializable {
private static final long serialVersionUID = 4976268749443066505L;
@EmbeddedId
private ProcId pk;
La classe de l'embedded id ressemble à ceci.
@Embeddable
public class ProcId implements Serializable {
private String materialID;
private int supplierID;
}
Sont l'entité et les classes d'identité correcte? Quelqu'un a une idée de comment changer le référentiel /service afin de travailler avec la clé primaire composite?
Si je le fais de cette façon, il sera toujours possible de chercher efficacement à la fois un materialID et un n ° de fournisseur dans les Achats table?
Pourquoi ne serait-il pas? L'utilisation d'une simple requête JPQL, et assurez-vous de disposer d'une base de données de l'index sur [materialID, n ° de fournisseur].
OriginalL'auteur PWillms | 2013-04-06
Vous devez vous connecter pour publier un commentaire.
Votre
ProcId
doit être définie ainsi:OriginalL'auteur skirsch