0

このクエリを実行するたびに、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")

正常に動作しますが、なぜですか?

私のテーブル、ウスアリオ:

私のユーザーテーブル

「superusuario」、「version_jpa」などの他の列を試してみましたが機能しません。正常に機能する列は「id」、「borrado」、および「username」のみです

クラス・ウスアリオ:

@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;
4

1 に答える 1

0

名前付きクエリは、データベース列ではなくエンティティ objetc で機能するためです。その ID を含む別のエンティティ オブジェクトを見つけようとします。その場合、名前付きクエリはそのエンティティ クラスのオブジェクトを提供し、そのオブジェクトからそのエンティティの ID または任意のフィールドを取得できます。

JPA 名前付きクエリは、SQL または Oracle クエリとは異なります。

DBでは列名はxyzですが、エンティティでは列名がABCである場合、XYZではなく名前付きクエリでABCをフェッチする必要があります。

于 2013-02-22T10:17:05.513 に答える