2013-08-06 13 views
6

Używam Spring 3.2.3, JPA 2.1, JUnit 4.11. Próbuję uruchomić test junit i wciąż otrzymuję abstrakcyjny typ schematu o nieznanym błędzie. Tu jest moja jednostka (obcięty do przestrzeni, posiada wszystkie pobierające i ustawiające):Streszczenie typu schematu jest nieznany

@Entity 
@Table(name = "WEB_PROFILES") 
public class TestWebProfile implements Serializable { 
    private static final long serialVersionUID = 1L; 

@Transient 
private String forward; 

@Column(name = "ACCESS_FLAG") 
private String accessFlag; 

@Temporal(TemporalType.DATE) 
@Column(name = "ACCESS_FLAG_UPD_DATE") 
private Date accessFlagUpdDate; 

@Column(name = "ACCESS_RESET_INTERVAL") 
private BigDecimal accessResetInterval; 

@Column(name = "ACCOUNT_TYPE") 
private String accountType; 

@Column(name = "CREATED_BY") 
private String createdBy; 

@Column(name = "E_MAIL") 
private String eMail; 

@Column(name = "FAILED_LOGIN_ATTEMPTS") 
private BigDecimal failedLoginAttempts; 

@Column(name = "FIRST_NAME") 
private String firstName; 

@Temporal(TemporalType.DATE) 
@Column(name = "FROI_ACCESS_APPROVE_DENY_DATE") 
private Date froiAccessApproveDenyDate; 

@Column(name = "FROI_ACCESS_APPROVED_FLAG") 
private String froiAccessApprovedFlag; 

@Column(name = "FROI_ACCESS_REQUESTED") 
private String froiAccessRequested; 

@Column(name = "FROI_APPROVED_BY") 
private String froiApprovedBy; 

@Temporal(TemporalType.DATE) 
@Column(name = "FROI_CONFIRM_EMAIL_SENT_DATE") 
private Date froiConfirmEmailSentDate; 

@Temporal(TemporalType.DATE) 
@Column(name = "FROI_LETTER_SENT_DATE") 
private Date froiLetterSentDate; 

@Column(name = "LAST_LOGON_ADDR") 
private String lastLogonAddr; 

@Temporal(TemporalType.DATE) 
@Column(name = "LAST_LOGON_DATE") 
private Date lastLogonDate; 

@Column(name = "LAST_NAME") 
private String lastName; 

@Column(name = "LAST_UPDATED_BY") 
private String lastUpdatedBy; 

@Column(name = "LAST_UPDATED_BY_NAME") 
private String lastUpdatedByName; 

@Column(name = "LAST_UPDATED_BY_SU_ID") 
private BigDecimal lastUpdatedBySuId; 

@Temporal(TemporalType.DATE) 
@Column(name = "MAIL_SENT_DATE") 
private Date mailSentDate; 

@Temporal(TemporalType.DATE) 
@Column(name = "MAINT_DATE") 
private Date maintDate; 

@Temporal(TemporalType.DATE) 
@Column(name = "NEW_PIN_REQ_DATE") 
private Date newPinReqDate; 

@Column(name = "PASSWORD") 
private String password; 

@Transient 
private String newPassword; 

@Temporal(TemporalType.DATE) 
@Column(name = "PASSWORD_UPD_DATE") 
private Date passwordUpdDate; 

@Column(name = "PHONE") 
private String phone; 

@Column(name = "PIN") 
private String pin; 

@Column(name = "POLICY_NUM") 
private BigDecimal policyNo; 

@Column(name = "PROFILE_CLASS_CODE") 
private String profileClassCode; 

@Temporal(TemporalType.DATE) 
@Column(name = "PROFILE_REQ_DATE") 
private Date profileReqDate; 

@Temporal(TemporalType.DATE) 
@Column(name = "PROFILE_UPDATE_DATE") 
private Date profileUpdateDate; 

@Column(name = "REMOTE_ADDR") 
private String remoteAddr; 

@Column(name = "SESSIONID") 
private String sessionid; 

@Column(name = "SUBSCRIBER_FLAG") 
private String subscriberFlag; 

@Column(name = "USER_ID") 
private BigDecimal userId; 

@Id 
@Column(name = "USER_NO") 
private BigDecimal userNo; 

@Column(name = "USERNAME") 
private String username; 

Moje testy JUnit:

@Test 
public void testGetWebProfileByUsername() { 

    TestWebProfile wp = sso.getWebProfile("MARLENE"); 
    System.out.println("name :" + wp.getFirstName()); 
    System.out.println("last name :" + wp.getLastName()); 
} 

Moje wykonania DAO:

@Override 
    public TestWebProfile getWebProfile(String username) { 
     String sqlString = "select w from TestWebProfile w where w.username =:username"; 

     return (TestWebProfile) getEntityManager() 
       .createQuery(sqlString, TestWebProfile.class) 
       .setParameter("username", username).getSingleResult(); 
    } 

Po Googling dla w ciągu ostatniej godziny jedynym winowajcą, który wydawał mi się sensowny, nie były adnotacje @Id i @Column, ale mam je w zmiennej userNo. Każda pomoc, która może być dostarczona, byłaby bardzo ceniona!

Odpowiedz

5

Spójrz na to. To daje pewne suggesstion w tym samym przypadku http://java.dzone.com/tips/the-nasty-jpa-unknown-abstract

+1

Dzięki @MGPJ, widziałem ten post. Po ponownym obejrzeniu tego problemu odkryłem problem. Używamy konfiguracji Java dla Spring i na beanmen entityManager, potrzebowałem dodać dodatkowy pakiet do zeskanowania. Kiedy to zrobiłem, wszystko działało dobrze. – NuAlphaMan

2

Jeśli używasz Java SE trzeba dodać pełną nazwę swojej klasie jednostki w persistence.xml, tak jak

<persistence-unit ...> 
    <class>your.custom.package.TestWebProfile</class> 
</persistence-unit> 

Pomijając część opakowania może doprowadzić do błędu.

Powiązane problemy