Итак, сначала немного предыстории. Проблема, с которой я сталкиваюсь, - это когда я создаю пользователя. Раньше я пытался создать пользователя и назначить им роль отдельно, прежде чем обнаруживать, что, вставив в таблицу SEC_USER_ROLE, программа также вставляла в таблицу APP_USER, и я получал ошибку о вставке повторяющихся значений в родительскую таблицу. Однако, в настоящее время путь создания пользователя и роли вместе я получаю следующее сообщение об ошибке:Ошибка JPA Eclipselink в таблице
Primary key should be primitive (or list of primitives for composite pk) , an instance of java.lang.Long with the primary keys filled in or an instance of WebIntSecRole.......
код следующим образом, не уверен, где я иду г неправильно или лучшее решение в этой точке.
Admin.java:
//New User Creation
WebIntUser newUser = new WebIntUser();
newUser.setLoginId(newLoginName);
newUser.setCreatedBy(loggedUser);
newUser.setCreatedOn(today);
newUser.setDbAuth(true);
newUser.setDeleted(false);
newUser.setDisabled(false);
newUser.setEmail(newEmail);
newUser.setEncrypted(true);
newUser.setEncryptPassword(true);
newUser.setFirstName(newFirstName);
newUser.setLastName(newLastName);
newUser.setUpdatedBy(loggedUser);
newUser.setUpdatedOn(today);
newUser.setVersion(1);
newUser.setLdapId(1);
//userService.createUser(newUser);
//Set role for new user
WebIntSecRoleUser newUserRole = new WebIntSecRoleUser();
newUserRole.setUser(newUser);
newUserRole.setDeleted(false);
newUserRole.setRole(userService.selectRoleById(1));
//newUserRole.setCreatedBy(loggedUser);
//newUserRole.setCreatedOn(today);
//newUserRole.setUpdatedBy(loggedUser);
//newUserRole.setUpdatedOn(today);
newUserRole.setVersionNumber(0);
userService.createRole(newUserRole);
WebIntUser.java
@Entity
@Table(name = "APP_USER")
@EntityListeners(value = { AuditChangeListener.class })
public class WebIntUser implements Serializable {
public WebIntUser() {
};
public WebIntUser(String login, String pass) {
this.loginId = login;
this.password = pass;
}
private Integer userId;
private String loginId;
private String password;
private String firstName;
private String lastName;
private String email;
private boolean disabled;
private boolean deleted;
private boolean dbAuth;
private boolean isEncrypted;
private boolean encryptPassword;
private Date lastLogin;
private Date prevLogin;
private Integer version;
private Date lastPasswordChange;
private Date createdOn;
private Date updatedOn;
private String createdBy;
private String updatedBy;
private Integer ldapId;
public static interface propertyName {
String userId = "userId";
String loginId = "loginId";
String password = "password";
String firstName = "firstName";
String lastName = "lastName";
String email = "email";
String disabled = "disabled";
String deleted = "deleted";
String dbAuth = "dbAuth";
String isEncrypted = "isEncrypted";
String encryptPassword = "encryptPassword";
String lastLogin = "lastLogin";
String prevLogin = "prevLogin";
String version = "version";
String lastPasswordChange = "lastPasswordChange";
String createdOn = "createdOn";
String updatedOn = "updatedOn";
String createdBy = "createdBy";
String updatedBy = "updatedBy";
String ldapId = "ldapId";
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USER_ID", nullable = false)
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
.....getters/setters
}
WebIntSecRoleUser.java:
@Entity
@Table(name = "SEC_ROLE_USER")
@EntityListeners(value = {AuditInfoChangeListener.class})
public class WebIntSecRoleUser implements AuditableDomainObject {
private Long id;
private WebIntSecRole role;
private WebIntUser user;
private boolean deleted;
private AuditInfo auditInfo;
private long versionNumber;
private Date createdOn;
private Date updatedOn;
private String createdBy;
private String updatedBy;
public interface propertyName extends Auditable.propertyName {
String id="id";
String role="role";
String user="user";
String deleted = "deleted";
String createdOn = "createdOn";
String updatedOn = "updatedOn";
String createdBy = "createdBy";
String updatedBy = "updatedBy";
}
public static interface permissionKey{
String UPDATE="SecRoleUser.U";
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ROLE_USER_ID",nullable = false, unique = true)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@JoinColumn(name="ROLE_ID", nullable=false)
public WebIntSecRole getRole() {
return role;
}
public void setRole(WebIntSecRole role) {
this.role = role;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="USER_ID", nullable = false)
public WebIntUser getUser() {
return user;
}
public void setUser(WebIntUser user) {
this.user = user;
}
Getters/setters
}
Примечание: Существует несколько закомментирована код, который я либо пытаюсь не использовать больше, или в случае создания и создания и т. д. Я получал ошибки для нескольких вставок.
Можете ли вы показать больше об исключении, таком как трассировка стека? Я не вижу, как настройка, созданная и созданная On, может привести к нескольким вставкам, поэтому в этом коде больше всего происходит. Я собираюсь угадать, что проблема заключается в вызове метода userService.selectRoleById (1), поскольку исключение не похоже на JPA или сущности, которые вы указали, - это похоже на попытку поиска WebIntSecRole, но не делает Не понимайте значение, данное ему. – Chris
Я получил это для работы, изменив Id of WebIntSecRole на Integer from Long. (selectRoleById возвращал null) Спасибо всем за то, что указали мне в правильном направлении, самая маленькая вещь сорвала мой прогресс. Очень признателен! –