[英]Hibernate One-to-Many Mapping Using Annotations; I'm trying to use foreign key association to save a user id in another table.
我無法完成這項工作。 我也嘗試過使用聯接表,但是結果是一樣的。 我需要在表中顯示的用戶ID不需要。
這是我創建實體的方式。
對於User和UserRole,我使用了一個聯接表,它可以工作。 我曾嘗試對Commission進行相同的操作,但沒有成功(聯接表仍然為空),因此我嘗試使用外鍵關聯進行如下操作。
用戶:
@Entity
@Table(name="USERS")
public class User implements Serializable{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@NotEmpty
@Column(name="USERNAME", unique=true, nullable=false)
private String username;
@NotEmpty
@Column(name="PASSWORD", nullable=false)
private String password;
@NotEmpty
@Column(name="FIRST_NAME", nullable=false)
private String firstName;
@NotEmpty
@Column(name="LAST_NAME", nullable=false)
private String lastName;
@NotEmpty
@Column(name="EMAIL", nullable=false)
private String email;
@NotEmpty
@ManyToMany(targetEntity=UserRole.class, fetch = FetchType.LAZY)
@JoinTable(name = "USERS_USER_ROLE",
joinColumns = { @JoinColumn(name = "USER_ID") },
inverseJoinColumns = { @JoinColumn(name = "USER_ROLE_ID") })
private Set<UserRole> userRoles = new HashSet<UserRole>();
@OneToMany(fetch = FetchType.LAZY, mappedBy="user")
private Set<Commission> commissions;
//getters and setters
佣金:
@Entity
@Table(name="COMMISSIONS")
public class Commission implements Serializable{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@NotEmpty
@Column(name="ORDER_NAME", unique=true, nullable=false)
private String orderName;
@NotEmpty
@Column(name="ORDER_DETAILS", unique=true, nullable=false)
private String orderDetails;
@Column(name="ORDER_STATUS", unique=true, nullable=false)
private String orderStatus;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID", nullable = false)
private User user;
//getters and setters
UserRole:
@Entity
@Table(name="USER_ROLE")
public class UserRole implements Serializable{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="ROLE", length=15, unique=true, nullable=true)
private String role = UserRoleType.USER.getUserRoleType(); // getUserRoleType is defined in an enum with 'ADMIN', 'DBA', 'USER'
//getters and setters
在UserDAO和CommissionDAO中,我使用了SessionFactory來保存實體。
從由UserDAO和CommissionDAO擴展的抽象類中摘錄。
@Autowired
private SessionFactory sessionFactory;
protected Session getSession(){
return sessionFactory.getCurrentSession();
}
public void persist(T entity) {
getSession().save(entity);
}
當我創建一個新用戶時,一切正常。 聯接表中已添加了正確的ID。 但是...當我添加新的佣金時,佣金本身會添加到佣金表中,但user_id仍為null。
我是新來的冬眠者,有了我的這個“項目”,我想我可能會想不到的更多。
也許問題出在代碼中的其他地方而不是這里?
無論如何,我有點束手無策,可以使用您的專業知識人員。 干杯!
感謝Rossi Robinsion。 就是這樣
我錯過了將用戶與我的佣金控制器關聯的想法。 這是以前。
@RequestMapping(value = { "/newcommission" }, method = RequestMethod.POST)
public String saveCommission(@Valid Commission commission, BindingResult result, ModelMap model) {
if (result.hasErrors()) {
return "commissioncreation";
}
if(!commissionService.isUserOrderNameUnique(commission.getId(), commission.getOrderName())){
FieldError orderNameError =new FieldError("commission","orderName",
messageSource.getMessage("non.unique.orderName",
new String[]{commission.getOrderName()}, Locale.getDefault()));
result.addError(orderNameError);
return "commissioncreation";
}
commissionService.saveCommission(commission);
model.addAttribute("success", "Your commission was successfully created.");
model.addAttribute("loggedinuser", getPrincipal());
return "commissioncreationsuccess";
}
這是之后。
@RequestMapping(value = { "/newcommission" }, method = RequestMethod.POST)
public String saveCommission(@Valid Commission commission, BindingResult result, ModelMap model) {
if (result.hasErrors()) {
return "commissioncreation";
}
if(!commissionService.isUserOrderNameUnique(commission.getId(), commission.getOrderName())){
FieldError orderNameError =new FieldError("commission","orderName",
messageSource.getMessage("non.unique.orderName",
new String[]{commission.getOrderName()}, Locale.getDefault()));
result.addError(orderNameError);
return "commissioncreation";
}
User user = userService.findByUsername(getPrincipal()); // associated the user properly.
commission.setUser(user);
commissionService.saveCommission(commission);
model.addAttribute("success", "Your commission was successfully created.");
model.addAttribute("loggedinuser", getPrincipal());
return "commissioncreationsuccess";
}
我不知道我怎么會錯過這個...
謝了哥們!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.