Voici un exemple concret avec quelques conseils de bonne pratique, car je viens de passer 2 heures à essayer de comprendre pourquoi ma requête HQL lançait le message suivant
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: MyEntity is not mapped [SELECT e FROM MyEntity e ...
exception lorsque j'ai utilisé le my_entity
dans l'annotation @Entity.
Le nom @Entity est utilisé pour faire référence à votre entité dans toute l'application, notamment dans les requêtes HQL, et @Table est le nom réel de la table de la BD, par exemple :
@Entity(name = "SomeThing")
@Table(name = "some_thing")
public class SomeThing {
@Id
private Long id;
}
alors votre référentiel JPA pourrait être quelque chose comme :
@Repository
public interface BikeOfferRepository extends JpaRepository<SomeThing, Long> {
/** A contrived example as in reality you'd use built-in
query for this type of select */
@Query("SELECT o FROM SomeThing WHERE o.id =:id") // <-- Here you use "SomeThing", the entity name in HQL
SomeThing findAllByBikeOwner(@Param("id") Long id);
}
Par ailleurs, il est recommandé d'utiliser le nom de la classe ou le nom en majuscules pour le nom de l'entité et les minuscules espacées par des tirets bas pour les noms des tables et des colonnes (comme dans mon exemple ci-dessus). Voir ici pour plus d'informations sur les conventions de dénomination des bases de données : https://www.sqlshack.com/learn-sql-naming-conventions/ .
Et dans la base de données actuelle (ou si vous utilisez des requêtes JDBC à l'ancienne), vous utiliseriez :
select * from some_thing where id=xxx;