2013-09-28 6 views
0

DTO 개체 :인수 유형 불일치

public class DTOUser implements UserDetails { 
/** 
* 
*/ 
private static final long serialVersionUID = -769714837633005963L; 
private Long id; 
private String account; 
private String password; 
private String statusStr; 
private UserStatus status; 
private int systemAdmin; 
private long operator; 
private String operateTime; 
private String name; 
private String company; 
private String email; 
private String telephone; 
private List<DTOAuthority> dtoAuthorities = new ArrayList<DTOAuthority>(); 
private List<DTOAgreement> dtoAgreements = new ArrayList<DTOAgreement>();} 

엔티티 :

@Entity 
@Table(name="adt_user") 
public class User { 
private long id; 
private String account; 
private String password; 
private String statusStr; 
private UserStatus status; 
private int systemAdmin; 
private long operator; 
private String operateTime; 
private String name; 
private String company; 
private String email; 
private String telephone; 
private Set<Authority> authorities = new HashSet<Authority>(); 
private Set<Agreement> agreements = new HashSet<Agreement>();} 

내가 엔티티 값을 복사 노호 방법을 사용하지만, 예외가있다 :

 
java.lang.IllegalArgumentException: Cannot invoke com.hna.adt.orm.User.setAuthorities - argument type mismatch 

무엇이 잘못 되었나요?

BeanUtils.copyProperties(entity, value); 

답변

0

당신은이

private List<DTOAuthority> dtoAuthorities = new ArrayList<DTOAuthority>(); 

private Set<Authority> authorities = new HashSet<Authority>(); 

BeanUtils.copyProperties 만 세터와 요소의 게터을 고려하고 SetList이 컬렉션과 반복 둘 것을 알아낼 수있을만큼 지능이 아닌 경우 요소를 하나씩 복사합니다. 여전히 AuthorityDTOAuthority과 호환됩니다. 그런 다음이 반사 오류가 발생합니다. Set i s는 List에서 할당 할 수 없습니다. 즉, 호환되지 않습니다. 당신이 컴파일시에 동일한 작업을 수행하려고하면

entity.setAuthorities(value.getDtoAuthorities()); 

그런 다음 당신은 컴파일 오류와 같은 sessage를 얻을.

dtoAuthoritiesSet 또는 authorities으로 변경해야 List이됩니다.

+0

대단히 감사합니다! – xuyaming

+0

@xuyaming 당신을 환영합니다! – A4L

+0

[Moo] (http://github.com/geoffreywiseman/Moo) 또는 Dozer와 같은 변형을 사용하여 좀 더 복잡한 매핑을 수행 할 수도 있습니다. –

1

권한 및 계약의 유형을 확인하면 다른 클래스 정의와 일치하지 않습니다. beanutils가 제대로 작동하려면 속성 유형이 일치하는지 확인하십시오.

+1

참고로 BeanUtils는 얕은 복사본 만 처리합니다. javadoc에서 :'이 메소드는 속성의 "얕은 사본"을 수행하기위한 것이므로 복잡한 속성 (예 : 중첩 된 것들)은 복사되지 않습니다. ' – tom

+0

대단히 감사합니다! 나는 그것을 해결했습니다 – xuyaming