Unfortunately, current Exposed framework does not contain upsert (update or insert) functionality out of the box. This simple extension library provides implementation for PostgreSQL. Implementation is based on the comment Maxr1998 made here.
Usage can be seen for example in Wire Poll Bot here
Following code tries to insert new value of optionId
to Votes
table where pollId
and userId
is composite key.
If the combination pollId
and userId
already exist, optionId
is updated.
Votes.insertOrUpdate(Votes.pollId, Votes.userId) {
it[pollId] = pollAction.pollId
it[pollOption] = pollAction.optionId
it[userId] = pollAction.userId
}
Library is hosted on Maven Central.
<dependency>
<groupId>dev.forst</groupId>
<artifactId>exposed-upsert</artifactId>
<version>1.3.4</version>
</dependency>
Gradle:
implementation("dev.forst", "exposed-upsert", "1.3.4")