2017-02-07 37 views
0

Итак, сначала немного предыстории. Проблема, с которой я сталкиваюсь, - это когда я создаю пользователя. Раньше я пытался создать пользователя и назначить им роль отдельно, прежде чем обнаруживать, что, вставив в таблицу 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 
} 

Примечание: Существует несколько закомментирована код, который я либо пытаюсь не использовать больше, или в случае создания и создания и т. д. Я получал ошибки для нескольких вставок.

+0

Можете ли вы показать больше об исключении, таком как трассировка стека? Я не вижу, как настройка, созданная и созданная On, может привести к нескольким вставкам, поэтому в этом коде больше всего происходит. Я собираюсь угадать, что проблема заключается в вызове метода userService.selectRoleById (1), поскольку исключение не похоже на JPA или сущности, которые вы указали, - это похоже на попытку поиска WebIntSecRole, но не делает Не понимайте значение, данное ему. – Chris

+0

Я получил это для работы, изменив Id of WebIntSecRole на Integer from Long. (selectRoleById возвращал null) Спасибо всем за то, что указали мне в правильном направлении, самая маленькая вещь сорвала мой прогресс. Очень признателен! –

ответ

0

По-моему, вы пропустили отображение @ManyToOne на WebIntSecRole. Вы указали только @JoinColumn.

@ManyToOne(/* desired options */) 
@JoinColumn(name="ROLE_ID", nullable=false) 
public WebIntSecRole getRole() { 
    return role; 
+0

Это правда, хотя я все еще сталкиваюсь с ошибкой –

+0

Вы уверены ... userService.selectRoleById (1) .. это не возвращает нуль? –

Смежные вопросы