J'ai deux entités J'ai déjà essayé de mettre p> i même essayé même J'ai essayé le Voici mes entités P> Batchfcm P>
blockQuote> fcmtopics p>
blockQuote> lorsque j'utilise Batchfcm code> et
fcmtopics code>. Un fcmtopic peut appartenir à de nombreux Batchfcm, il a donc une relation
@manytoone code>. J'essaie de sauvegarder le Batchfcm mais sa ne pas être sauvée.
cascadetype.all code>. Mais ce n'est pas ma condition.
La table FCMTopics aura des données déjà insérées, je dois en choisir un et définir dans la base de données BatchFCM. P>
@Transient code> Annotation, cela a fonctionné mais le fcmtopie La colonne reste toujours nulle. Je veux la colonne avec l'identifiant de fcmtopics dedans.
Le transitoire Arrêtez de mapper le champ FCMTopics dans des données JSON lorsque récupéré à partir d'un contrôleur. Mais je veux le récupérer. P>
cascadeType code> i obtenir une exception de contrainteViolation avec la clé en double, je sais que c'est due au
unique = true . Ci-dessous mon service P>
BatchFcm fcmDetail;
if (adminFcmResource.getId() != null) {
log.info("Updating bulk fcm log for batch id: {}, admin: {}", adminFcmResource.getId(), adminUser);
fcmDetail = batchFcmRepository.findOne(adminFcmResource.getId());
fcmDetail.setStatus(adminFcmResource.getStatus());
fcmDetail.setCreatedBy(adminFcmResource.getAdminId());
fcmDetail.setImagePath(adminFcmResource.getImagePath());
fcmDetail.setLogo(adminFcmResource.getLogo());
if (!InputUtil.isEmpty(adminFcmResource.getTopic())) {
fcmDetail.setFcmTopics(fcmTopicsService.findByName(adminFcmResource.getTopic()));
} else {
fcmDetail.setCsvPath(adminFcmResource.getCsvPath());
}
} else {
log.info("Adding bulk fcm log with csv path: {}, admin: {}", adminFcmResource.getCsvPath(), adminUser);
fcmDetail = new BatchFcm(adminFcmResource.getTitle(),
adminFcmResource.getMessage(),
adminFcmResource.getImagePath(),
adminFcmResource.getAdminId(),
adminFcmResource.getExternalRedirectUrl());
if (!InputUtil.isEmpty(adminFcmResource.getTopic())) {
fcmDetail.setFcmTopics(fcmTopicsService.findByName(adminFcmResource.getTopic()));
} else {
fcmDetail.setCsvPath(adminFcmResource.getCsvPath());
}
fcmDetail.setLogo(adminFcmResource.getLogo());
fcmDetail.setForScheduling(false);
}
fcmDetail.setFcmType(FCMTypes.OFFERS.ordinal());
fcmDetail.setCreatedBy(AuthUtil.getCurrentUser().getId());
batchFcmRepository.save(fcmDetail);
3 Réponses :
Un problème que je vois ici est qu'il manque l'annotation @ID dans les deux entités. Cela peut arriver, que même votre sujet existe déjà dans votre dB, Hibernate ne voit pas l'identifiant et pense qu'il s'agit d'une nouvelle entrée, qui doit être insérée. Essayez d'ajouter les champs d'identification de vos entités. P>
L'annotation d'identification est présente dans la abstraction code>
Utilisez-vous une annotation @TransActional sur votre méthode?
signifie que vous oubliez d'enregistrer l'état de l'objet p>
J'ai essayé d'utiliser cascadetype.persist code> ou
cascadeetype.all code> mais en raison du
unique = true code> une contrainteViolationException. Cela fait sauver l'instance, ne le fait pas?
Veuillez définir la version dans la table de base de données, car Hibernate tente de mettre à jour la propriété transitoire sur la base de la version. P>
Oui, ma version était NULL, puis je l'ai changé 0, puis cela a fonctionné.