Untitled
unknown
plain_text
3 months ago
2.5 kB
8
Indexable
package pl.chunklock.core.database.entity.impl;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
import pl.chunklock.core.database.cache.EntityCache;
import pl.chunklock.core.database.entity.BaseEntity;
@Entity
@Getter
@Setter
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Table(name = "island_upgrades", uniqueConstraints = {
@UniqueConstraint(columnNames = {"islandId", "upgradeId"})
})
public class IslandUpgrade extends BaseEntity {
public static final String CACHE_BY_ISLAND = "upgradeByIslandId";
public static final String CACHE_BY_ISLAND_AND_UPGRADE = "upgradeByIslandAndUpgradeId";
@Column(nullable = false)
long islandId;
@Column(nullable = false)
String upgradeId;
@Column(nullable = false)
int level;
public static List<IslandUpgrade> findByIslandId(final long islandId) {
return findCached(CACHE_BY_ISLAND, islandId, () ->
Optional.of(
findAll(
IslandUpgrade.class,
"FROM IslandUpgrade WHERE islandId = :islandId",
Map.of("islandId", islandId),
Integer.MAX_VALUE
)
)
).orElseGet(List::of);
}
public static Optional<IslandUpgrade> findByIslandAndUpgradeId(final long islandId,
final String upgradeId) {
final String key = islandId + ":" + upgradeId;
return findCached(CACHE_BY_ISLAND_AND_UPGRADE, key, () ->
findSingle(
IslandUpgrade.class,
"FROM IslandUpgrade WHERE islandId = :islandId AND upgradeId = :upgradeId",
Map.of("islandId", islandId, "upgradeId", upgradeId)
)
);
}
@Override
protected void onCacheUpdate() {
namedCache(CACHE_BY_ISLAND_AND_UPGRADE).put(islandId + ":" + upgradeId, this);
namedCache(CACHE_BY_ISLAND).invalidate(islandId);
}
@Override
protected void onCacheEvict() {
namedCache(CACHE_BY_ISLAND_AND_UPGRADE).invalidate(islandId + ":" + upgradeId);
namedCache(CACHE_BY_ISLAND).invalidate(islandId);
}
}
Editor is loading...
Leave a Comment