-2
给您的情况JPA复合键@OneToOne(PersistentObjectException)
- 用户类
- 发票类
- InvoiceId类(复合键)
我无法将现有的User对象(从数据库中检索到)合并到新的发票对象为什么?有什么建议么 ?
@Entity
@Table(name = "DA_USER")
public class User implements Serializable {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "USERNAME",unique = true, nullable = false , length = 50)
private String username;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "TIMESTAMP_OF_REGISTRATION", unique = false, nullable = true, updatable = false, columnDefinition = "TIMESTAMP")
private Date timestampOfRegistration;
@Column(name = "PASSWORD",unique = false, nullable = false , length = 60)
private String password;
@Column(name = "NON_EXPIRED",unique = false, nullable = false)
private boolean accountNonExpired;
@Column(name = "CREDENTIAL_NON_EXPIRED",unique = false, nullable = false)
private boolean credentialsNonExpired;
@Column(name = "NON_LOCKED",unique = false, nullable = false)
private boolean accountNonLocked;
@Column(name = "ENABLED",unique = false, nullable = false)
private boolean enabled;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "DA_USER_ROLES", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
private Set<Role> roles;
// getters and setters
}
public class InvoiceId implements Serializable {
private Long id;
private Long user;
// getters , setters , equals and hashCode
}
@Entity
@Table(name = "DA_INVOICE")
@IdClass(InvoiceId.class)
public class Invoice implements Serializable {
private static final long serialVersionUID = 4101444312504776489L;
@Id
@Column(name = "ID")
private Long id;
@Id
@OneToOne(cascade = {CascadeType.MERGE})
@JoinColumn(name = "USER_ID")
private User user;
@Column(name = "TOTAL_AMOUNT", nullable = false)
private Double totalAmount;
// getters and setters
}
// invoice controller
@Controller
@RequestMapping("/invoice")
public class InvoiceController {
public String createInvoice(Locale locale, Model model,@AuthenticationPrincipal SecurityUser securityUser, Pageable pageable) {
// getting an existing user from the database
User user = userRepository.findOne(securityUser.getId());
Invoice invoice1 = new Invoice();
invoice1.setUser(user);
invoice1.setId(12l);
invoice1.setTotalAmount(250.0);
invoiceRepository.save(invoice1); // org.hibernate.PersistentObjectException: detached entity passed to persist: User
return "invoice";
}
在这里,你是例外
为什么你不能?发布异常的堆栈跟踪。 – uaiHebert 2014-10-07 00:35:21
@uaiHebert现在就可以查看了 – 2014-10-07 00:43:32