diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java index 4a244e28..ebb25a4e 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java @@ -17,16 +17,18 @@ import com.google.common.collect.Iterables; public class FeedEntryContentDAO extends GenericDAO { - public FeedEntryContent findExisting(String contentHash, String titleHash) { + public Long findExisting(String contentHash, String titleHash) { - CriteriaQuery query = builder.createQuery(getType()); + CriteriaQuery query = builder.createQuery(Long.class); Root root = query.from(getType()); + query.select(root.get(FeedEntryContent_.id)); Predicate p1 = builder.equal(root.get(FeedEntryContent_.contentHash), contentHash); Predicate p2 = builder.equal(root.get(FeedEntryContent_.titleHash), titleHash); query.where(p1, p2); - TypedQuery q = em.createQuery(query); + TypedQuery q = em.createQuery(query); + limit(q, 0, 1); return Iterables.getFirst(q.getResultList(), null); } diff --git a/src/main/java/com/commafeed/backend/model/FeedEntry.java b/src/main/java/com/commafeed/backend/model/FeedEntry.java index 22ef3c31..eec59d2c 100644 --- a/src/main/java/com/commafeed/backend/model/FeedEntry.java +++ b/src/main/java/com/commafeed/backend/model/FeedEntry.java @@ -36,7 +36,7 @@ public class FeedEntry extends AbstractModel { @ManyToOne(fetch = FetchType.LAZY) private Feed feed; - @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false) + @OneToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(nullable = false, updatable = false) private FeedEntryContent content; diff --git a/src/main/java/com/commafeed/backend/services/FeedEntryContentService.java b/src/main/java/com/commafeed/backend/services/FeedEntryContentService.java index eeeeae6a..4f8b9768 100644 --- a/src/main/java/com/commafeed/backend/services/FeedEntryContentService.java +++ b/src/main/java/com/commafeed/backend/services/FeedEntryContentService.java @@ -21,17 +21,22 @@ public class FeedEntryContentService { String contentHash = DigestUtils.sha1Hex(StringUtils.trimToEmpty(content.getContent())); String titleHash = DigestUtils.sha1Hex(StringUtils.trimToEmpty(content.getTitle())); - FeedEntryContent existing = feedEntryContentDAO.findExisting(contentHash, titleHash); - if (existing == null) { + Long existingId = feedEntryContentDAO.findExisting(contentHash, titleHash); + + FeedEntryContent result = null; + if (existingId == null) { content.setContentHash(contentHash); content.setTitleHash(titleHash); content.setAuthor(FeedUtils.truncate(FeedUtils.handleContent(content.getAuthor(), baseUrl, true), 128)); content.setTitle(FeedUtils.truncate(FeedUtils.handleContent(content.getTitle(), baseUrl, true), 2048)); content.setContent(FeedUtils.handleContent(content.getContent(), baseUrl, false)); - existing = content; - feedEntryContentDAO.saveOrUpdate(existing); + result = content; + feedEntryContentDAO.saveOrUpdate(result); + } else { + result = new FeedEntryContent(); + result.setId(existingId); } - return existing; + return result; } }