don't fetch the whole content, just return the id if it does

This commit is contained in:
Athou
2013-07-27 16:42:50 +02:00
parent 60bf96411c
commit 6d396e1982
3 changed files with 16 additions and 9 deletions

View File

@@ -17,16 +17,18 @@ import com.google.common.collect.Iterables;
public class FeedEntryContentDAO extends GenericDAO<FeedEntryContent> { public class FeedEntryContentDAO extends GenericDAO<FeedEntryContent> {
public FeedEntryContent findExisting(String contentHash, String titleHash) { public Long findExisting(String contentHash, String titleHash) {
CriteriaQuery<FeedEntryContent> query = builder.createQuery(getType()); CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<FeedEntryContent> root = query.from(getType()); Root<FeedEntryContent> root = query.from(getType());
query.select(root.get(FeedEntryContent_.id));
Predicate p1 = builder.equal(root.get(FeedEntryContent_.contentHash), contentHash); Predicate p1 = builder.equal(root.get(FeedEntryContent_.contentHash), contentHash);
Predicate p2 = builder.equal(root.get(FeedEntryContent_.titleHash), titleHash); Predicate p2 = builder.equal(root.get(FeedEntryContent_.titleHash), titleHash);
query.where(p1, p2); query.where(p1, p2);
TypedQuery<FeedEntryContent> q = em.createQuery(query); TypedQuery<Long> q = em.createQuery(query);
limit(q, 0, 1);
return Iterables.getFirst(q.getResultList(), null); return Iterables.getFirst(q.getResultList(), null);
} }

View File

@@ -36,7 +36,7 @@ public class FeedEntry extends AbstractModel {
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
private Feed feed; private Feed feed;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false) @OneToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(nullable = false, updatable = false) @JoinColumn(nullable = false, updatable = false)
private FeedEntryContent content; private FeedEntryContent content;

View File

@@ -21,17 +21,22 @@ public class FeedEntryContentService {
String contentHash = DigestUtils.sha1Hex(StringUtils.trimToEmpty(content.getContent())); String contentHash = DigestUtils.sha1Hex(StringUtils.trimToEmpty(content.getContent()));
String titleHash = DigestUtils.sha1Hex(StringUtils.trimToEmpty(content.getTitle())); String titleHash = DigestUtils.sha1Hex(StringUtils.trimToEmpty(content.getTitle()));
FeedEntryContent existing = feedEntryContentDAO.findExisting(contentHash, titleHash); Long existingId = feedEntryContentDAO.findExisting(contentHash, titleHash);
if (existing == null) {
FeedEntryContent result = null;
if (existingId == null) {
content.setContentHash(contentHash); content.setContentHash(contentHash);
content.setTitleHash(titleHash); content.setTitleHash(titleHash);
content.setAuthor(FeedUtils.truncate(FeedUtils.handleContent(content.getAuthor(), baseUrl, true), 128)); content.setAuthor(FeedUtils.truncate(FeedUtils.handleContent(content.getAuthor(), baseUrl, true), 128));
content.setTitle(FeedUtils.truncate(FeedUtils.handleContent(content.getTitle(), baseUrl, true), 2048)); content.setTitle(FeedUtils.truncate(FeedUtils.handleContent(content.getTitle(), baseUrl, true), 2048));
content.setContent(FeedUtils.handleContent(content.getContent(), baseUrl, false)); content.setContent(FeedUtils.handleContent(content.getContent(), baseUrl, false));
existing = content; result = content;
feedEntryContentDAO.saveOrUpdate(existing); feedEntryContentDAO.saveOrUpdate(result);
} else {
result = new FeedEntryContent();
result.setId(existingId);
} }
return existing; return result;
} }
} }