JPA одно лицо 3 таблицы

У меня есть три стола с одинаковыми столбцами. У одного из них есть исходные измеренные данные, у других - данные, агрегированные по минутам и часам. При загрузке данных в JPA я хочу иметь одну и ту же сущность / класс для каждого набора данных. Я пробовал это с наследованием /mappedsuperclass, но это не сработало до сих пор (не уверен, что я делаю это правильно). Я либо получаю, что нет подходящего конструктора, либо таблица не отображена. Когда я устанавливаю сущность "Таблица моего значения" в одну из таблиц, она работает для этой таблицы, однако я хочу иметь возможность загружать данные из всех таблиц во время выполнения.

от PersistenceManager.java

@SuppressWarnings("unchecked")
public List<Value> getValues(Sensor sensor) throws Exception {
    String query = "SELECT v FROM ValueByHour v WHERE v.sensor = :sensor ORDER BY v.timestamp ASC";
    List<Value> list = em.createQuery(query, Value.class).setParameter("sensor", sensor).getResultList();
    return list;
}

Value.java

package de.mediacoding.smarthome.entities;

import java.io.Serializable;
import javax.persistence.*;
import java.sql.Timestamp;


/**
 * The persistent class for the Value database table.
 * 
 */
@Entity
@Table(name="Value")
public class Value implements Serializable {

private static final long serialVersionUID = -7514236041356226101L;
private int id;
private Timestamp timestamp;
private double value;
private Sensor sensor;

public Value() {
}

public Value(int id, Timestamp timestamp, double value, Sensor sensor) {
    this.id = id;
    this.timestamp = timestamp;
    this.value = value;
    this.sensor = sensor;
}

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
public int getId() {
    return this.id;
}

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

@Column(nullable=false)
public Timestamp getTimestamp() {
    return this.timestamp;
}

public void setTimestamp(Timestamp timestamp) {
    this.timestamp = timestamp;
}

@Column(nullable=false)
public double getValue() {
    return this.value;
}

public void setValue(double value) {
    this.value = this.sensor.getRealValue(value);;
}

//bi-directional many-to-one association to Sensor
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="sensor_id", nullable=false)
public Sensor getSensor() {
    return this.sensor;
}

public void setSensor(Sensor sensor) {
    this.sensor = sensor;
}

}

Трассировки стека

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: ValueByHour is not mapped [SELECT v FROM ValueByHour v WHERE v.sensor = :sensor ORDER BY v.timestamp ASC]
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93)
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:324)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3291)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3180)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1735)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:301)
... 36 more

если это поможет, вот весь проект http://crafthost.de/src.zip

Надеюсь, вы понимаете, что я пытаюсь сделать.

0 ответов

Другие вопросы по тегам