hibernate tweaks

This commit is contained in:
Athou
2013-06-06 09:54:17 +02:00
parent c907abbf62
commit be6db080fd
18 changed files with 40 additions and 56 deletions

View File

@@ -269,26 +269,26 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
public void markFeedEntries(User user, Feed feed, Date olderThan) { public void markFeedEntries(User user, Feed feed, Date olderThan) {
List<FeedEntryStatus> statuses = findByFeed(feed, user, true, List<FeedEntryStatus> statuses = findByFeed(feed, user, true,
ReadingOrder.desc, false); ReadingOrder.desc, false);
update(markList(statuses, olderThan)); saveOrUpdate(markList(statuses, olderThan));
} }
public void markCategoryEntries(User user, List<FeedCategory> categories, public void markCategoryEntries(User user, List<FeedCategory> categories,
Date olderThan) { Date olderThan) {
List<FeedEntryStatus> statuses = findByCategories(categories, user, List<FeedEntryStatus> statuses = findByCategories(categories, user,
true, ReadingOrder.desc, false); true, ReadingOrder.desc, false);
update(markList(statuses, olderThan)); saveOrUpdate(markList(statuses, olderThan));
} }
public void markStarredEntries(User user, Date olderThan) { public void markStarredEntries(User user, Date olderThan) {
List<FeedEntryStatus> statuses = findStarred(user, ReadingOrder.desc, List<FeedEntryStatus> statuses = findStarred(user, ReadingOrder.desc,
false); false);
update(markList(statuses, olderThan)); saveOrUpdate(markList(statuses, olderThan));
} }
public void markAllEntries(User user, Date olderThan) { public void markAllEntries(User user, Date olderThan) {
List<FeedEntryStatus> statuses = findAll(user, true, ReadingOrder.desc, List<FeedEntryStatus> statuses = findAll(user, true, ReadingOrder.desc,
false); false);
update(markList(statuses, olderThan)); saveOrUpdate(markList(statuses, olderThan));
} }
private List<FeedEntryStatus> markList(List<FeedEntryStatus> statuses, private List<FeedEntryStatus> markList(List<FeedEntryStatus> statuses,

View File

@@ -34,44 +34,24 @@ public abstract class GenericDAO<T extends AbstractModel> {
builder = em.getCriteriaBuilder(); builder = em.getCriteriaBuilder();
} }
public void save(T object) {
em.persist(object);
}
public void save(Collection<T> objects) {
for (Object object : objects) {
em.persist(object);
}
}
public void update(Collection<T> objects) {
for (Object object : objects) {
em.merge(object);
}
}
public void update(T... objects) {
update(Arrays.asList(objects));
}
public void saveOrUpdate(Collection<? extends AbstractModel> models) { public void saveOrUpdate(Collection<? extends AbstractModel> models) {
int i = 0;
for (AbstractModel model : models) { for (AbstractModel model : models) {
if (model.getId() == null) { if (model.getId() == null) {
em.persist(model); em.persist(model);
} else { } else {
em.merge(model); em.merge(model);
} }
if (i % 20 == 0) {
em.flush();
}
i++;
} }
} }
public void saveOrUpdate(AbstractModel... models) { public void saveOrUpdate(AbstractModel... models) {
for (AbstractModel model : models) { saveOrUpdate(Arrays.asList(models));
if (model.getId() == null) {
em.persist(model);
} else {
em.merge(model);
}
}
} }
public void delete(T object) { public void delete(T object) {

View File

@@ -94,7 +94,7 @@ public class FeedRefreshTaskGiver {
map.put(f.getId(), f); map.put(f.getId(), f);
} }
feedDAO.update(map.values()); feedDAO.saveOrUpdate(map.values());
} }
public void giveBack(Feed feed) { public void giveBack(Feed feed) {

View File

@@ -64,7 +64,7 @@ public class OPMLImporter {
} }
category.setParent(parent); category.setParent(parent);
category.setUser(user); category.setUser(user);
feedCategoryDAO.save(category); feedCategoryDAO.saveOrUpdate(category);
} }
List<Outline> children = outline.getChildren(); List<Outline> children = outline.getChildren();

View File

@@ -72,7 +72,7 @@ public class SubscriptionHandler {
&& StringUtils.contains(message, pushpressError)) { && StringUtils.contains(message, pushpressError)) {
String[] tokens = message.split(" "); String[] tokens = message.split(" ");
feed.setPushTopic(tokens[tokens.length - 1]); feed.setPushTopic(tokens[tokens.length - 1]);
feedDAO.update(feed); feedDAO.saveOrUpdate(feed);
log.debug("handled pushpress subfeed {} : {}", topic, log.debug("handled pushpress subfeed {} : {}", topic,
feed.getPushTopic()); feed.getPushTopic());
} else { } else {

View File

@@ -17,7 +17,7 @@ public class FeedEntryService {
FeedEntryStatus status = feedEntryStatusDAO.findById(user, entryId); FeedEntryStatus status = feedEntryStatusDAO.findById(user, entryId);
if (status != null) { if (status != null) {
status.setRead(read); status.setRead(read);
feedEntryStatusDAO.update(status); feedEntryStatusDAO.saveOrUpdate(status);
} }
} }
@@ -25,7 +25,7 @@ public class FeedEntryService {
FeedEntryStatus status = feedEntryStatusDAO.findById(user, entryId); FeedEntryStatus status = feedEntryStatusDAO.findById(user, entryId);
if (status != null) { if (status != null) {
status.setStarred(starred); status.setStarred(starred);
feedEntryStatusDAO.update(status); feedEntryStatusDAO.saveOrUpdate(status);
} }
} }
} }

View File

@@ -23,7 +23,7 @@ public class FeedService {
feed = new Feed(); feed = new Feed();
feed.setUrl(url); feed.setUrl(url);
feed.setUrlHash(DigestUtils.sha1Hex(url)); feed.setUrlHash(DigestUtils.sha1Hex(url));
feedDAO.save(feed); feedDAO.saveOrUpdate(feed);
} }
return feed; return feed;
} }

View File

@@ -86,7 +86,7 @@ public class FeedSubscriptionService {
status.setSubscription(sub); status.setSubscription(sub);
statuses.add(status); statuses.add(status);
} }
feedEntryStatusDAO.save(statuses); feedEntryStatusDAO.saveOrUpdate(statuses);
} }
taskGiver.add(feed); taskGiver.add(feed);
return feed; return feed;

View File

@@ -56,7 +56,7 @@ public class UserService {
user.getPassword(), user.getSalt()); user.getPassword(), user.getSalt());
if (authenticated) { if (authenticated) {
user.setLastLogin(Calendar.getInstance().getTime()); user.setLastLogin(Calendar.getInstance().getTime());
userDAO.update(user); userDAO.saveOrUpdate(user);
return user; return user;
} }
} }
@@ -85,7 +85,7 @@ public class UserService {
for (Role role : roles) { for (Role role : roles) {
user.getRoles().add(new UserRole(user, role)); user.getRoles().add(new UserRole(user, role));
} }
userDAO.save(user); userDAO.saveOrUpdate(user);
return user; return user;
} }

View File

@@ -60,7 +60,7 @@ public class NextUnreadRedirectPage extends WebPage {
FeedEntryStatus status = Iterables.getFirst(statuses, null); FeedEntryStatus status = Iterables.getFirst(statuses, null);
String url = status.getEntry().getUrl(); String url = status.getEntry().getUrl();
status.setRead(true); status.setRead(true);
feedEntryStatusDAO.update(status); feedEntryStatusDAO.saveOrUpdate(status);
throw new RedirectToUrlException(url); throw new RedirectToUrlException(url);
} }
} }

View File

@@ -63,7 +63,7 @@ public class PasswordRecoveryCallbackPage extends BasePage {
user.setApiKey(userService.generateApiKey(user)); user.setApiKey(userService.generateApiKey(user));
user.setRecoverPasswordToken(null); user.setRecoverPasswordToken(null);
user.setRecoverPasswordTokenDate(null); user.setRecoverPasswordTokenDate(null);
userDAO.update(user); userDAO.saveOrUpdate(user);
info("Password saved."); info("Password saved.");
} else { } else {
error("Passwords do not match."); error("Passwords do not match.");

View File

@@ -41,7 +41,7 @@ public class PasswordRecoveryPage extends BasePage {
.randomUUID().toString())); .randomUUID().toString()));
user.setRecoverPasswordTokenDate(Calendar.getInstance() user.setRecoverPasswordTokenDate(Calendar.getInstance()
.getTime()); .getTime());
userDAO.update(user); userDAO.saveOrUpdate(user);
mailService.sendMail(user, "Password recovery", mailService.sendMail(user, "Password recovery",
buildEmailContent(user)); buildEmailContent(user));
info("Email sent."); info("Email sent.");

View File

@@ -68,11 +68,11 @@ public class AdminREST extends AbstractResourceREST {
} }
user.setEmail(userModel.getEmail()); user.setEmail(userModel.getEmail());
user.setDisabled(!userModel.isEnabled()); user.setDisabled(!userModel.isEnabled());
userDAO.update(user); userDAO.saveOrUpdate(user);
Set<Role> roles = userRoleDAO.findRoles(user); Set<Role> roles = userRoleDAO.findRoles(user);
if (userModel.isAdmin() && !roles.contains(Role.ADMIN)) { if (userModel.isAdmin() && !roles.contains(Role.ADMIN)) {
userRoleDAO.save(new UserRole(user, Role.ADMIN)); userRoleDAO.saveOrUpdate(new UserRole(user, Role.ADMIN));
} else if (!userModel.isAdmin() && roles.contains(Role.ADMIN)) { } else if (!userModel.isAdmin() && roles.contains(Role.ADMIN)) {
if (StartupBean.USERNAME_ADMIN.equals(user.getName())) { if (StartupBean.USERNAME_ADMIN.equals(user.getName())) {
return Response return Response

View File

@@ -208,7 +208,7 @@ public class CategoryREST extends AbstractResourceREST {
parent.setId(Long.valueOf(parentId)); parent.setId(Long.valueOf(parentId));
cat.setParent(parent); cat.setParent(parent);
} }
feedCategoryDAO.save(cat); feedCategoryDAO.saveOrUpdate(cat);
return Response.ok().build(); return Response.ok().build();
} }
@@ -227,7 +227,7 @@ public class CategoryREST extends AbstractResourceREST {
for (FeedSubscription sub : subs) { for (FeedSubscription sub : subs) {
sub.setCategory(null); sub.setCategory(null);
} }
feedSubscriptionDAO.update(subs); feedSubscriptionDAO.saveOrUpdate(subs);
List<FeedCategory> categories = feedCategoryDAO List<FeedCategory> categories = feedCategoryDAO
.findAllChildrenCategories(getUser(), cat); .findAllChildrenCategories(getUser(), cat);
for (FeedCategory child : categories) { for (FeedCategory child : categories) {
@@ -236,7 +236,7 @@ public class CategoryREST extends AbstractResourceREST {
child.setParent(null); child.setParent(null);
} }
} }
feedCategoryDAO.update(categories); feedCategoryDAO.saveOrUpdate(categories);
feedCategoryDAO.delete(cat); feedCategoryDAO.delete(cat);
return Response.ok().build(); return Response.ok().build();
@@ -297,12 +297,12 @@ public class CategoryREST extends AbstractResourceREST {
for (int i = 0; i < categories.size(); i++) { for (int i = 0; i < categories.size(); i++) {
categories.get(i).setPosition(i); categories.get(i).setPosition(i);
} }
feedCategoryDAO.update(categories); feedCategoryDAO.saveOrUpdate(categories);
} else { } else {
feedCategoryDAO.update(category); feedCategoryDAO.saveOrUpdate(category);
} }
feedCategoryDAO.update(category); feedCategoryDAO.saveOrUpdate(category);
return Response.ok(Status.OK).build(); return Response.ok(Status.OK).build();
} }
@@ -320,7 +320,7 @@ public class CategoryREST extends AbstractResourceREST {
return Response.status(Status.NOT_FOUND).build(); return Response.status(Status.NOT_FOUND).build();
} }
category.setCollapsed(req.isCollapse()); category.setCollapsed(req.isCollapse());
feedCategoryDAO.update(category); feedCategoryDAO.saveOrUpdate(category);
return Response.ok(Status.OK).build(); return Response.ok(Status.OK).build();
} }

View File

@@ -359,9 +359,9 @@ public class FeedREST extends AbstractResourceREST {
for (int i = 0; i < subs.size(); i++) { for (int i = 0; i < subs.size(); i++) {
subs.get(i).setPosition(i); subs.get(i).setPosition(i);
} }
feedSubscriptionDAO.update(subs); feedSubscriptionDAO.saveOrUpdate(subs);
} else { } else {
feedSubscriptionDAO.update(subscription); feedSubscriptionDAO.saveOrUpdate(subscription);
} }
return Response.ok(Status.OK).build(); return Response.ok(Status.OK).build();

View File

@@ -67,7 +67,7 @@ public class PubSubHubbubCallbackREST {
feed.getPushTopic()); feed.getPushTopic());
feed.setPushLastPing(Calendar.getInstance().getTime()); feed.setPushLastPing(Calendar.getInstance().getTime());
} }
feedDAO.update(feeds); feedDAO.saveOrUpdate(feeds);
return Response.ok(challenge).build(); return Response.ok(challenge).build();
} else { } else {
log.debug("rejecting callback: no push info for {}", topic); log.debug("rejecting callback: no push info for {}", topic);

View File

@@ -134,7 +134,7 @@ public class UserREST extends AbstractResourceREST {
if (request.isNewApiKey()) { if (request.isNewApiKey()) {
user.setApiKey(userService.generateApiKey(user)); user.setApiKey(userService.generateApiKey(user));
} }
userDAO.update(user); userDAO.saveOrUpdate(user);
return Response.ok().build(); return Response.ok().build();
} }

View File

@@ -14,6 +14,10 @@
<property name="hibernate.dialect" value="${jpa.dialect}" /> <property name="hibernate.dialect" value="${jpa.dialect}" />
<property name="hibernate.default_batch_fetch_size" value="100" /> <property name="hibernate.default_batch_fetch_size" value="100" />
<property name="hibernate.jdbc.batch_size" value="20" />
<property name="hibernate.order_inserts" value="true" />
<property name="hibernate.order_updates" value="true" />
<property name="hibernate.cache.region.factory_class" <property name="hibernate.cache.region.factory_class"
value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" /> value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" />