Iam은 여전히 lazyinitializationexception 예외가 발생합니다. 예, 저 또는 다른 사람이 컬렉션에 액세스하려고 시도하는 동안 세션이 닫혔다는 의미입니다. 아니요, OpenEntityManagerInViewFilter가 작동하지 않았습니다. 예, @ManyToOne (fetch = FetchType.EAGER) 도움이되었지만 사용하지 않으려 고합니다.fetch = FetchType.EAGER를 사용하지 않고 lazyinitializationexception을 푸는 방법?
그 밖의 방법은 무엇입니까?
P. : 주석 클래스가있는 jpa와 함께 HibernateEntityManger를 사용하고 있습니다. 사용자 (ID가, FIRST_NAME는, LAST_NAME은 이메일 ....) 역할 (ID는, 이름이 ... 코멘트) users_roles :
UPADATE 여기 먼저 모든 의 내가 4 개 테이블이, 내 코드입니다 (USER_ID, ROLE_ID)는 사용자가 mutiples 역할을 할 수
메일 (ID, USER_ID, 제목, 메시지, to_id ...) ... 사용자 엔티티
@Entity
@Table(name = "USERS")
public class User implements GenericDomain{
public static final String _ID = "id";
private Long id;
private String firstName;
private String lastName;
private String email;
private Set<Role> roles = new HashSet<Role>(0);
/* Constructors */
public User() {
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID", unique = true, nullable = false)
public Long getId() { return this.id; }
public void setId(Long id) { this.id = id; }
@Column(name="FIRST_NAME", nullable = false, length = 64)
@NotEmpty
@Length(min = 4, max = 45)
public String getFirstName() { return this.firstName; }
public void setFirstName(String firstname) { this.firstName = firstname; }
@Column(name="LAST_NAME", nullable = false, length = 64)
@NotEmpty
@Length(min = 4, max = 45)
public String getLastName() { return this.lastName; }
public void setLastName(String lastname) { this.lastName = lastname; }
@Column(name="EMAIL", unique = false, length = 64)
@Email
@NotEmpty
@Length(min = 4, max = 45)
public String getEmail() { return this.email; }
public void setEmail(String email) { this.email = email; }
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "USERS_ROLES"
, joinColumns = { @JoinColumn(name = "user_id") }
, inverseJoinColumns = { @JoinColumn(name = "role_id") }
)
public Set<Role> getRoles() {
return this.roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
/*@Override toString/equals/hascode */
}
,역할 엔티티
@Entity
@Table(name = "ROLES")
public class Role implements GenericDomain {
private Long id;
private String name;
private String comment;
private Set<User> users = new HashSet<User>(0);
public Role() {
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID", unique = true, nullable = false)
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
@Column(name="NAME", nullable = false, length = 64)
@NotEmpty
@Length(min = 1, max = 32)
public String getName() { return name; }
public void setName(String name) { this.name = name; }
@Column(name="COMMENT", nullable = true, length = 256)
@Length(min = 0, max = 255)
public String getComment() { return this.comment; }
public void setComment(String comment) { this.comment = comment;}
@ManyToMany(cascade=CascadeType.REFRESH,fetch=FetchType.EAGER)
@JoinTable(
name = "USERS_ROLES"
, joinColumns = { @JoinColumn(name = "role_id") }
, inverseJoinColumns = { @JoinColumn(name = "user_id") }
)
public Set<User> getUsers() {
return this.users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
/*@Override toString/equals/hascode */
}
메일
@Entity @Table (NAME = "메일") 공용 클래스 메일 {
private Long id;
private String mailSubject;
private String mailContent;
private Long receiverId;
private User user = null;
public Mail(){
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
public Long getId(){ return this.id; }
public void setId(Long id){ this.id = id;}
@Column(name = "MAILSUBJECT", nullable = false, length = 63)
@Length(max = 63)
public String getMailSubject(){ return this.mailSubject; }
public void setMailSubject(String mailSubject){ this.mailSubject = mailSubject; }
@Column(name = "MAILCONTENT", nullable = true, length = 255)
@Length(max = 255)
public String getMailContent(){ return this.mailContent; }
public void setMailContent(String mailContent){ this.mailContent = mailContent; }
@Column(name = "RECEIVERID")
public Long getReceiverId(){ return this.receiverId; }
public void setReceiverId(Long receiverId){ this.receiverId = receiverId; }
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "USER_ID")
@NotNull
public User getUser(){ return this.user; }
public void setUser(User user){ this.user = user; }
}
사용자 컨트롤러
GenericDomain 구현 012 모든 것을 가지고있는 사용자<select >
<c:forEach items="${allRoles}" var="role">
<option value="${role.id}" <c:if test="${fn:contains(roleSelected, role)}">selected="selected"</c:if> >${role.name}</option>
</c:forEach>
</select>
에 대한 34,687,이
메일 컨트롤러
@Controller
@SessionAttributes("mail")
@RequestMapping("/portal/mail")
public class MailController{
@Autowired
private MailService mailService;
@RequestMapping(value = "ajaxLoad", method = RequestMethod.GET)
public @ResponseBody List<Mail> list(@RequestParam(value = "type", required = true) String type){
return mailService.getUserMails((Long) WebHelper.getPrincipal().getUser().getId(),type);
}
}
내 web.xml을
<filter>
<filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
내 edit.jsp를, 내가 edit.jsp를 사용자가 lazy = false로 잘 작동하고 있습니다. FetchType.EAGER를 사용하여 내 메일을 가져올 수 없으므로 FetchType.EAGER없이 순환 스택으로 들어갑니다. 그 게으른 예외가 있습니다.
안녕 Bozlo, 내 코드 –
@stunaz에서 봐주십시오 해결 추가 - 업데이 트를 확인을. – Bozho