org.hibernate.PropertyAccessException: 无法通过反射为字符串设置字段值 [STRING] 值
org.hibernate.PropertyAccessException: Could not set field value [STRING] value by reflection for String
用于 @ManyToMany
关系和附加列的 @Embeddable
是否适用于 String
?
我不使用 @Generated Value for @Id
因为我的实体 ApplikationUser
@Id
@Column(length = 128)
private String applikationUserId;
根据业务逻辑总是 Id
这是我的代码:
@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;
@Embeddable
public class ApplikationUserPopupMessageId implements Serializable {
@Column(name = "applikation_user_id")
private String applikationUserId;
@Column(name = "popup_message_id")
private Long popupMessageId;
@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<>();
@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<>();
编辑 - 2020 年 11 月 23 日
关于缺乏兴趣,我们似乎可以 @Embeddable
和 String
?
只需将相应属性的 getter 和 setter 放入 @Embeddable
。
如果您将实体 class 注释为字段的访问级别
会有帮助吗
@Entity(access = AccessType.FIELD)
实例化applikationUserPopupMessageId:
@Entity
public class ApplikationUserPopupMessage {
@EmbeddedId
private ApplikationUserPopupMessageId applikationUserPopupMessageId = new ApplikationUserPopupMessageId();
}
用于 @ManyToMany
关系和附加列的 @Embeddable
是否适用于 String
?
我不使用 @Generated Value for @Id
因为我的实体 ApplikationUser
@Id
@Column(length = 128)
private String applikationUserId;
根据业务逻辑总是 Id
这是我的代码:
@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;
@Embeddable
public class ApplikationUserPopupMessageId implements Serializable {
@Column(name = "applikation_user_id")
private String applikationUserId;
@Column(name = "popup_message_id")
private Long popupMessageId;
@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<>();
@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<>();
编辑 - 2020 年 11 月 23 日
关于缺乏兴趣,我们似乎可以 @Embeddable
和 String
?
只需将相应属性的 getter 和 setter 放入 @Embeddable
。
如果您将实体 class 注释为字段的访问级别
会有帮助吗@Entity(access = AccessType.FIELD)
实例化applikationUserPopupMessageId:
@Entity
public class ApplikationUserPopupMessage {
@EmbeddedId
private ApplikationUserPopupMessageId applikationUserPopupMessageId = new ApplikationUserPopupMessageId();
}