Skip to content

Commit e12344e

Browse files
author
Gerald Unterrainer
committed
try
1 parent b7bac83 commit e12344e

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

src/main/java/info/unterrainer/commons/httpserver/daos/BasicJpqlDao.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,31 @@ public UpsertResult<P> upsert(final TypedQuery<P> query, final P entity) {
103103
return Transactions.withNewTransactionReturning(emf, em -> upsert(em, query, entity));
104104
}
105105

106-
private P getFirst(final EntityManager em, final TypedQuery<P> query) {
107-
List<P> r = getList(em, query, 0, 1);
106+
private <T> T getFirst(final EntityManager em, final TypedQuery<T> query) {
107+
List<T> r = getList(em, query, 0, 1);
108108
if (r.size() == 1) {
109-
P jpa = r.get(0);
109+
T jpa = r.get(0);
110110
return jpa;
111111
}
112112
return null;
113113
}
114114

115+
public <T> UpsertResult<P> _upsert(final EntityManager em, final TypedQuery<T> query, final P entity) {
116+
boolean wasInserted = false;
117+
boolean wasUpdated = false;
118+
T e = getFirst(em, query);
119+
if (e == null) {
120+
e = create(em, entity);
121+
wasInserted = true;
122+
} else {
123+
entity.setId(e.getId());
124+
entity.setCreatedOn(e.getCreatedOn());
125+
e = update(em, entity);
126+
wasUpdated = true;
127+
}
128+
return UpsertResult.<P>builder().wasInserted(wasInserted).wasUpdated(wasUpdated).jpa(e).build();
129+
}
130+
115131
@Override
116132
public UpsertResult<P> upsert(final EntityManager em, final TypedQuery<P> query, final P entity) {
117133
boolean wasInserted = false;

src/main/java/info/unterrainer/commons/httpserver/daos/ListQuery.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,8 @@ public List<T> getListReversed() {
132132
Collections.reverse(l);
133133
return l;
134134
}
135+
136+
public UpsertResult<P> upsert(final P entity) {
137+
return withEntityManager(em -> builder.getDao()._upsert(em, builder.getTypedQuery(em), entity));
138+
}
135139
}

src/main/java/info/unterrainer/commons/httpserver/daos/UpsertResult.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package info.unterrainer.commons.httpserver.daos;
22

3-
import info.unterrainer.commons.rdbutils.entities.BasicJpa;
43
import lombok.Data;
54
import lombok.NoArgsConstructor;
65
import lombok.experimental.SuperBuilder;
76

87
@Data
98
@NoArgsConstructor
109
@SuperBuilder(toBuilder = true)
11-
public class UpsertResult<T extends BasicJpa> {
10+
public class UpsertResult<T> {
1211

1312
private T jpa;
1413
private boolean wasInserted;

0 commit comments

Comments
 (0)