diff options
Diffstat (limited to 'sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManager.java')
-rw-r--r-- | sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManager.java | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManager.java b/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManager.java index adcd2e2..acd4d35 100644 --- a/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManager.java +++ b/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManager.java @@ -36,6 +36,8 @@ public abstract class SqlEntityManager implements EntityManager { private boolean autoCommit; + private boolean open = true; + private final Tx tx = new Tx(); protected Connection currentConnection() { @@ -229,8 +231,13 @@ public abstract class SqlEntityManager implements EntityManager { } @Override - public <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass) { - throw new UnsupportedOperationException(); + public <T> TypedQuery<T> createQuery(String sqlString, Class<T> resultClass) { + // What happens if the transaction is aborted and this query is executes? Can a Query outlive it's connection? + // Or even EntityManager? Should probably store a reference to the current connection and check that the + // current one is the same when executing. + + SqlDao<?, T> dao = this.<Object, T>getDao(resultClass); + return new SqlQuery<>(dao, new SqlExecutorDelegate(), sqlString, true); } @Override @@ -245,19 +252,13 @@ public abstract class SqlEntityManager implements EntityManager { @Override public Query createNativeQuery(String sql) { - throw new UnsupportedOperationException(); + return new SqlQuery<>(null, new SqlExecutorDelegate(), sql, true); } @Override - public Query createNativeQuery(String sqlString, Class resultClass) { - // What happens if the transaction is aborted and this query is executes? Can a Query outlive it's connection? - // Or even EntityManager? Should probably store a reference to the current connection and check that the - // current one is the same when executing. - @SuppressWarnings({"UnnecessaryLocalVariable", "unchecked"}) - Class<Object> klass = resultClass; - - SqlDao<?, Object> dao = this.<Object, Object>getDao(klass); - return new SqlQuery<>(dao, new SqlExecutorDelegate(), sqlString, true); + public Query createNativeQuery(String sql, Class resultClass) { + SqlDao<?, ?> dao = getDao(resultClass); + return new SqlQuery<>(dao, new SqlExecutorDelegate(), sql, true); } private class SqlExecutorDelegate implements SqlExecutor { @@ -323,11 +324,17 @@ public abstract class SqlEntityManager implements EntityManager { @Override public void close() { + try { + c.close(); + } catch (SQLException ignore) { + } finally { + open = false; + } } @Override public boolean isOpen() { - throw new UnsupportedOperationException(); + return open; } @Override |