package com.querydsl.example.sql.repository;
import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.Projections;
import com.querydsl.example.sql.guice.Transactional;
import com.querydsl.example.sql.model.User;
import java.util.List;
import static com.querydsl.example.sql.model.QTweet.tweet;
import static com.querydsl.example.sql.model.QUser.user;
public class UserRepository extends AbstractRepository {
@Transactional
public User findById(Long id) {
return selectFrom(user).where(user.id.eq(id)).fetchOne();
}
@Transactional
public Long save(User entity) {
if (entity.getId() != null) {
update(user).populate(entity).execute();
return entity.getId();
}
return insert(user).populate(entity)
.executeWithKey(user.id);
}
@Transactional
public List<UserInfo> allWithTweetCount() {
return select(Projections.constructor(UserInfo.class, user.username, tweet.id.count())).from(user)
.leftJoin(tweet).on(user.id.eq(tweet.posterId))
.groupBy(user.username)
.fetch();
}
@Transactional
public List<User> findAll(Predicate expr) {
return selectFrom(user).where(expr).fetch();
}
@Transactional
public List<User> all() {
return selectFrom(user).fetch();
}
}