2015-08-07 5 views
1

Я использую JPA с Spring Data,Могу ли я запросить объект в JPA

Have события класса, который имеет поле UserDetail createdBy, я хочу запросить событие, которое созданное указанным пользователем. Вот мой запрос

@Query("SELECT e FROM event WHERE e.created_by = :userdetail") 
    Collection<Event> getEventsCreatedByUser(@Param("userdetail")UserDetail user); 

Когда я запускаю тесты с этим запросом в классе Dao я получаю сообщение об ошибке org.hibernate.hql.internal.ast.QuerySyntaxException: event is not mapped [SELECT e FROM event WHERE e.created_by = :userdetail]

Вот класс сущностей, то CREATED_BY в BaseEntityAudit, я тестировал класс User, который также расширяет BaseEntityAudit и он работал нормально, также pgadmin показывает, что столбец CreatedBy существует в таблице событий

@Entity 
@Table(name = "Event") 
@AttributeOverride(name = "id", column = @Column(name = "event_id", 
     nullable = false, columnDefinition = "bigserial")) 
public class Event extends BaseEntityAudit { 
    @Embedded 
    private Point point;  
    @OneToMany(cascade = CascadeType.ALL) 
    @JoinTable(name = "event_comments") 
    private Collection<Comment> comments = new ArrayList<Comment>(); 
    @OneToMany 
    @JoinTable(name = "\"users_tagged_at_event\"") 
    private Collection<UserDetail> usersTagged = new ArrayList<UserDetail>();  
    public Event(UserDetail createdBy, Point point) { 
     super(); 
     this.point = point; 
     setCreatedBy(createdBy); 
    } 

также BaseEntityAudit

public abstract class BaseEntityAudit extends BaseEntity { 
    @Column(name = "created_at") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date createdAt; 
    @Column(name = "created_by", length = 20) 
    private UserDetail createdBy; 
    @Column(name = "updated_at") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date updatedAt; 
    @Column(name = "updated_by", length = 20) 
    private UserDetail updatedBy; 
//geters/setters ... 
    /** 
    * Sets createdAt before insert 
    */ 
    @PrePersist 
    public void setCreationDate() { 
     this.createdAt = new Date(); 
    } 
    /** 
    * Sets updatedAt before update 
    */ 
    @PreUpdate 
    public void setChangeDate() { 
     this.updatedAt = new Date(); 
    } 
} 

UPDATE

Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: created_by of: home.map.events.entity.Event [SELECT e FROM home.map.events.entity.Event e WHERE e.created_by = :userdetail] 
+0

Опубликовать сущность класса 'event'. –

+0

У вас нет поля "created_by" ... у вас есть "createdBy" !!! –

+0

@NeilStockton уже сделал это при обновлении ... –

ответ

2

Вы забыли упомянуть event e в предложении. Я думаю, у вас есть таблица событий и класс событий (указано @ pL4Gu33). Поэтому вам необходимо использовать Событие вместо Событие.

@Query("SELECT e FROM Event e WHERE e.createdBy = :userdetail") 
       use---^  ^- added  ^---- updated 
+0

сделал то, что посоветовал, даже указанный @Table (name = «Event») для запроса таблицы I'm, но он не работал. –

+0

Какое имя вашей таблицы и имя объекта ? И опубликуйте свой класс сущности события. –

+0

сделано, может эта ошибка быть из-за поля created_by находясь в BaseEntityAudit? –

1

Ваш класс - это «Событие», а не «событие», и посмотрите на ответ Наман Гала.

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