Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Помогите разобраться с Hibernate HQL


Автор: xrotgar 9.6.2012, 06:07
Добрый день.
Есть две таблицы:
Код

CREATE TABLE status (
    id INTEGER NOT NULL DEFAULT nextval('status_id_seq'),
    status_name VARCHAR(30) NOT NULL,
    ...
    PRIMARY KEY (id)
);

Код

CREATE TABLE cards (
    id INTEGER NOT NULL DEFAULT nextval('cards_id_seq'),
    ...
    id_status INTEGER NOT NULL,
    ...
    FOREIGN KEY (id_status) REFERENCES status(id),
    PRIMARY KEY  (id)
);

Мапинг осуществляется через анотации:
Код

@javax.persistence.Table(name = "status", schema = "public", catalog = "")
@Entity
public class StatusEntity
{
    private Integer id;
    private String status_name;
    
    private Collection<CardsEntity> cardsById;

    public StatusEntity() {}

    @Id
    @javax.persistence.Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer getId() {
        return id;
    }

    public void setId(Integer id)    {
        this.id = id;
    }

    @Basic
    @javax.persistence.Column(name = "status_name")
    public String getStatus_name() {
        return status_name;
    }

    public void setStatus_name(String status_name) {
        this.status_name = status_name;
    }

    @OneToMany(mappedBy = "statusByIdStatus")
    public Collection<CardsEntity> getCardsById() {
        return cardsById;
    }

    public void setCardsById(Collection<CardsEntity> cardsById) {
        this.cardsById = cardsById;
    }
}

Код

@javax.persistence.Table(name = "cards", schema = "public", catalog = "")
@Entity
public class CardsEntity
{
    private Integer id;
    private Integer id_status;
    private StatusEntity statusByIdStatus;

    public CardsEntity() {}

    @Id
    @javax.persistence.Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer getId()    {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Basic
    @javax.persistence.Column(name = "id_status")
    public Integer getId_status() {
        return id_status;
    }

    public void setId_status(Integer id_status) {
        this.id_status = id_status;
    }

    @ManyToOne
    @JoinColumn(name = "id_status", referencedColumnName = "id", insertable = false, updatable = false)
    public StatusEntity getStatusByIdStatus() {
        return statusByIdStatus;
    }

    public void setStatusByIdStatus(StatusEntity statusByIdStatus) {
        this.statusByIdStatus = statusByIdStatus;
    }



При попытке выполнить запрос
Код

session = HibernateUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
Query query = session.createQuery("select c from CardsEntity as c inner join StatusEntity as s where  s.status_name=:statusName").setString("statusName","PAY");
 paymentCards = (List<CardsEntity>) query.list();

Получаю следующую ошибку Path expected for join! 

Проблемо скорей всего в неправильном мапинге, но понять где ошибся не могу.
Заранее спасибо. 



Автор: xrotgar 9.6.2012, 07:32
Проблему решил. Ошибка была в неправильном запросе.
Код

session = HibernateUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
Query query = session.createQuery("select c from CardsEntity  c join c.statusByIdStatus s where s.status_name = :statusName").setString("statusName","PAY");
paymentCards = (List<CardsEntity>) query.list();

Тему можно закрывать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)