7
votes

org.hibernate.PropertyAccessException: impossible de définir la valeur de champ [STRING] valeur par réflexion pour String

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 ?


0 commentaires

3 Réponses :


2
votes

Mettez simplement des getters et des setters pour les propriétés correspondantes dans votre @Embeddable .


3 commentaires

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



2
votes

Cela vous aide-t-il si vous annotez votre classe d'entité avec le niveau d'accès au champ

@Entity(access = AccessType.FIELD)


1 commentaires

Non ... Mêmes erreurs ...



3
votes

Instanciez applikationUserPopupMessageId:

@Entity
public class ApplikationUserPopupMessage {
  @EmbeddedId
  private ApplikationUserPopupMessageId applikationUserPopupMessageId = new ApplikationUserPopupMessageId();
}

C'est un problème connu


0 commentaires