Le @Embeddable
pour les relations @ManyToMany
et les colonnes supplémentaires fonctionne-t-il avec String
? Je n'utilise pas @Generated Value for @Id
car mon Entity ApplikationUser
@Entity public class ApplikationUser implements UserDetails { /** * */ private static final long serialVersionUID = -5517804528054972083L; @Id @Column(length = 128) private String applikationUserId; @Column private String password; @ManyToOne @JoinColumn(name = "idRole") private Role role; private boolean enabled = true; @OneToMany( mappedBy = "popupMessage", cascade = CascadeType.ALL, orphanRemoval = true ) private List<ApplikationUserPopupMessage> applikationUserPopupMessages = new ArrayList<>();
par la logique métier a toujours un Id
Voici mon code:
@Entity @Table public class PopupMessage { @Id @GeneratedValue @Column(length = 128) private Long messageId; private String title; private String message; @OneToMany( mappedBy = "applikationUser", cascade = CascadeType.ALL, orphanRemoval = true ) private List<ApplikationUserPopupMessage> applikationUserPopupMessages = new ArrayList<>();
@Embeddable public class ApplikationUserPopupMessageId implements Serializable { @Column(name = "applikation_user_id") private String applikationUserId; @Column(name = "popup_message_id") private Long popupMessageId;
@EmbeddedId private ApplikationUserPopupMessageId applikationUserPopupMessageId; @ManyToOne(fetch = FetchType.EAGER) @MapsId("applikationUserId") private ApplikationUser applikationUser; @ManyToOne(fetch = FetchType.EAGER) @MapsId("popupMessageId") private PopupMessage popupMessage; @Column(name = "gelesen") private boolean gelesen = false;
@Id @Column(length = 128) private String applikationUserId;
EDIT - 23.11.2020 En ce qui concerne le manque d'intérêt, cela nous semble possible @Embeddable
with String
?
3 Réponses :
Mettez simplement des getters et des setters pour les propriétés correspondantes dans votre @Embeddable
.
Merci. Mais il y a des getters et des setters pour tout ...
Avez-vous revérifié la visibilité et la dénomination?
Oui. Ils sont générés automatiquement par IDE
Cela vous aide-t-il si vous annotez votre classe d'entité avec le niveau d'accès au champ
@Entity(access = AccessType.FIELD)
Non ... Mêmes erreurs ...
Instanciez applikationUserPopupMessageId:
@Entity public class ApplikationUserPopupMessage { @EmbeddedId private ApplikationUserPopupMessageId applikationUserPopupMessageId = new ApplikationUserPopupMessageId(); }
C'est un problème connu