mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
don't fetch the whole content, just return the id if it does
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user