Система авторизации устройств пользователя
This commit is contained in:
@@ -1,26 +1,41 @@
|
||||
package com.rosetta.im.database;
|
||||
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.Transaction;
|
||||
import org.hibernate.query.Query;
|
||||
|
||||
public class QuerySession<T> implements AutoCloseable {
|
||||
|
||||
private Session session;
|
||||
private Query<T> query;
|
||||
private final Session session;
|
||||
private final Query<T> query;
|
||||
private final Transaction tx;
|
||||
|
||||
public QuerySession(Session session, Query<T> query) {
|
||||
this.session = session;
|
||||
this.query = query;
|
||||
this.tx = session.beginTransaction();
|
||||
}
|
||||
|
||||
public Query<T> getQuery() {
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
if (session != null && session.isOpen()) {
|
||||
session.close();
|
||||
public void commit() {
|
||||
if (tx != null && tx.isActive()) {
|
||||
tx.commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
try {
|
||||
if (tx != null && tx.isActive()) {
|
||||
tx.rollback();
|
||||
}
|
||||
} finally {
|
||||
if (session != null && session.isOpen()) {
|
||||
session.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -233,12 +233,18 @@ public abstract class Repository<T> {
|
||||
* Выполняет запрос с параметрами и возвращает список сущностей
|
||||
* @param queryString SQL запрос
|
||||
* @param parameters параметры запроса
|
||||
* @param noResultType если true, то не указывать тип результата в запросе, используется для запросов типа UPDATE и DELETE
|
||||
* @return список сущностей
|
||||
*/
|
||||
public QuerySession<T> buildQuery(String queryString, HashMap<String, Object> parameters) {
|
||||
public QuerySession<T> buildQuery(String queryString, HashMap<String, Object> parameters, boolean noResultType) {
|
||||
Session session = HibernateUtil.openSession();
|
||||
try {
|
||||
Query<T> query = session.createQuery(queryString, entityClass);
|
||||
Query<T> query;
|
||||
if(noResultType) {
|
||||
query = session.createQuery(queryString);
|
||||
} else {
|
||||
query = session.createQuery(queryString, entityClass);
|
||||
}
|
||||
for (var entry : parameters.entrySet()) {
|
||||
query.setParameter(entry.getKey(), entry.getValue());
|
||||
}
|
||||
@@ -248,6 +254,16 @@ public abstract class Repository<T> {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Выполняет запрос с параметрами и возвращает список сущностей, тип результата указывается автоматически, используется для запросов типа SELECT
|
||||
* @param queryString SQL запрос
|
||||
* @param parameters параметры запроса
|
||||
* @return список сущностей
|
||||
*/
|
||||
public QuerySession<T> buildQuery(String queryString, HashMap<String, Object> parameters) {
|
||||
return buildQuery(queryString, parameters, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Подсчет сущностей по набору полей
|
||||
|
||||
@@ -28,6 +28,9 @@ public class Buffer extends CreateUpdateEntity {
|
||||
|
||||
@Column(name = "destination")
|
||||
private String to;
|
||||
|
||||
@Column(name = "packetId")
|
||||
private int packetId;
|
||||
|
||||
@Column(name = "packet", columnDefinition = "bytea")
|
||||
private byte[] packet;
|
||||
@@ -71,4 +74,12 @@ public class Buffer extends CreateUpdateEntity {
|
||||
public void setTimestamp(Long timestamp) {
|
||||
this.timestamp = timestamp;
|
||||
}
|
||||
|
||||
public int getPacketId() {
|
||||
return packetId;
|
||||
}
|
||||
|
||||
public void setPacketId(int packetId) {
|
||||
this.packetId = packetId;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user