2013-02-22 2 views
0

У меня есть проблема с JPA, когда выполнить этот запросjava.lang.IllegalArgumentException с TopLink и JPA

@NamedQuery(name = "Usuario.getUsuarioIntento", query = "SELECT u.intentos_id FROM Usuario u WHERE u.username = :username and u.borrado = 0") 

я получаю эту ошибку:

java.lang.IllegalArgumentException: NamedQuery of name: Usuario.getUsuarioIntento not found. 

Но если я выполнить этот запрос

@NamedQuery(name = "Usuario.getUsuarioIntento", query = "SELECT u.id FROM Usuario u WHERE u.username = :username and u.borrado = 0") 

Работать нормально, почему?

Мой стол, Новичок:

MY USER TABLE

я попробовать с другим столбцом как «superusuario», «version_jpa» и не работаю, только столбцы, которые отлично работают в «идентификатор» borrado» и 'имя пользователя'

Класс Новичок:

@Temporal(TemporalType.TIMESTAMP) 
private Date    fechaCreacion; 

@Id 
@GeneratedValue (strategy=GenerationType.AUTO) 
private int     id; 

@OneToOne(cascade = CascadeType.ALL) 
private Password   password; 

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.LAZY) 
private List<Password>  clavesAntiguas; 

@OneToOne 
private Persona    persona; 

private String    sessionId; 

private String    username; 

@ManyToOne(cascade = CascadeType.REFRESH) 
private Rol     rol; 

@ManyToOne(cascade = CascadeType.REFRESH) 
private Perfil    perfil; 

@OneToOne (cascade = CascadeType.ALL) 
private IntentosBloqueo  intentos; 

private boolean    superUsuario; 

private int     borrado; 
private int     esManager; 

@OneToMany (cascade = {CascadeType.ALL} , fetch = FetchType.LAZY) 
private Collection<UsuarioSociedad> sociedades; 

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REFRESH) 
    @JoinTable (name="USR_UND_VIS", 
    joinColumns={ 
    @JoinColumn (name="ID_USU", table="USUARIO", referencedColumnName="ID"), 
    }, 
    inverseJoinColumns= 
    @JoinColumn (name="ID_UNI", table="UND_ORG", referencedColumnName="ID") 
) 
    private List<UnidadOrganizativa> unidadesVisibles; 

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REFRESH) 
    @JoinTable (name="USR_UND_DIS", 
    joinColumns={ 
    @JoinColumn (name="ID_USU", table="USUARIO", referencedColumnName="ID"), 
    }, 
    inverseJoinColumns= 
    @JoinColumn (name="ID_UNI", table="UND_ORG", referencedColumnName="ID") 
) 
    private List<UnidadOrganizativa> unidadesDisponibles; 

ответ

0

Поскольку Названный запрос работает на Entity objetc не на datbase колонке. Вы пытаетесь найти другой объект объекта, который содержит этот идентификатор. В этом случае ваш именованный запрос даст вам объект этого класса сущности, и из этого объекта u может получить идентификатор или whtever fiels этого объекта.

JPA названный запрос не похож на запрос SQL или оракула.

Iin in DB имя вашей колонки - xyz, но в сущности имя вашего столбца - ABC, тогда вы должны получить ABC в именованном запросе, а не в XYZ.

Смежные вопросы