Cześć,
Nie ukrywam, że problem jest raczej z tych trywialnych. Mam pewną tabelę w bazie danych PostgreSQL
CREATE TABLE "gupsyMessages"
(
"rowId" serial NOT NULL,
"timestamp" timestamp without time zone, -- timestamp otrzymania ramki z gatewaya
"resultX1" smallint,
"resultY1" smallint,
"resultZ1" smallint,
"resultX2" smallint,
"resultY2" smallint,
"resultZ2" smallint,
"Xmin" smallint,
"Ymin" smallint,
"Zmin" smallint,
"Xmax" smallint,
"Ymax" smallint,
"Zmax" smallint,
"samplesCount" smallint,
battery smallint,
CONSTRAINT "gupsyMessages_pKey" PRIMARY KEY ("rowId")
)
W Javie mam napisaną klasę z odpowiednimi adnotacjami Hibernate, która ma służyć do obsługi tej tabeli
@Entity
@Table(name="\"gupsyMessages\"")
public class LoraMessage {
@Id
@GenericGenerator(
name = "table",
strategy = "enhanced-table",
parameters = {
@org.hibernate.annotations.Parameter(
name = "\"gupsyMessages\"",
value = "\"gupsyMessages_rowId_seq\""
)
})
@GeneratedValue(generator = "table", strategy=GenerationType.TABLE)
private int id;
@Column(name="timestamp")
private DateTime timestamp;
@Column(name="\"resultX1\"")
private short resultX1;
@Column(name="\"resultY1\"")
private short resultY1;
@Column(name="\"resultZ1\"")
private short resultZ1;
@Column(name="\"resultX2\"")
private short resultX2;
@Column(name="\"resultY2\"")
private short resultY2;
@Column(name="\"resultZ2\"")
private short resultZ2;
@Column(name="\"Xmin\"")
private short Xmin;
@Column(name="\"Ymin\"")
private short Ymin;
@Column(name="\"Zmin\"")
private short Zmin;
@Column(name="\"Xmax\"")
private short Xmax;
@Column(name="\"Ymax\"")
private short Ymax;
@Column(name="\"Zmax\"")
private short Zmax;
@Column(name="\"samplesCount\"")
private short samplesCount;
@Column(name="battery")
private short battery;
public LoraMessage() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
// analogicznie reszta getterów i setterow
Jest też oczywiście main
public static void main(String[] args) {
// TODO Auto-generated method stub
Configuration factoryConf = new Configuration();
factoryConf.configure("hibernate.cfg.xml");
SessionFactory sessionFactory = factoryConf.buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
LoraMessage message = (LoraMessage) session.load(LoraMessage.class, new Integer(1));
session.close();
sessionFactory.close();
}
Problem polega na tym, że gdy debuguje swój kod widzę, że Hibernate w dziwny i niepoprawny sposób generuję zapytanie SQL do bazy.
Hibernate: select loramessag0_.id as id1_0_0_, loramessag0_."Xmax" as Xmax2_0_0_, loramessag0_."Xmin" as Xmin3_0_0_, loramessag0_."Ymax" as Ymax4_0_0_, loramessag0_."Ymin" as Ymin5_0_0_, loramessag0_."Zmax" as Zmax6_0_0_, loramessag0_."Zmin" as Zmin7_0_0_, loramessag0_.battery as battery8_0_0_, loramessag0_."resultX1" as resultX9_0_0_, loramessag0_."resultX2" as resultX10_0_0_, loramessag0_."resultY1" as resultY11_0_0_, loramessag0_."resultY2" as resultY12_0_0_, loramessag0_."resultZ1" as resultZ13_0_0_, loramessag0_."resultZ2" as resultZ14_0_0_, loramessag0_."samplesCount" as samples15_0_0_, loramessag0_.timestamp as timesta16_0_0_ from "gupsyMessages" loramessag0_ where loramessag0_.id=?
14:12:30.844 [main] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - BŁĄD: kolumna loramessag0_.id nie istnieje
Pozycja: 8
Pytanie dlaczego jest tam ten: "loramessag0_" i skąd hibernate to bierze? Jak zmienić to zachowanie aby było np: "gupsyMessages".id ?