Spring Data(Hibernate) в Java

163
18 марта 2018, 20:54

Здравствуйте, возник вопрос по поводу использования Spring Data(Hibrante) в Java. вопрос заключается в следующем: можно ли при мэппинге какого, либо объекта добавить дополнительную информация из БД в поле этого объекта, к примеру:

Entity

@Entity
@Table(name = "groups")
public class Group {
    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name= "increment", strategy= "increment")
    @Column(name = "id", unique = true, nullable = false)
    private long id;
    @Column(name = "name", length = 20, nullable = false)
    private String name;
    //Есть таблица Users в БД, и у них связь один ко многим. Хотелось
    //бы при мэппинге этого объекта посчитать кол-во пользователей в этой группе
    private int countUsers;
    public Group(){
    }
    public Group(String name) {
        this.name = name;
    }

    //Seters, getters, equals and hash code
}

Repository

public interface GroupRepository extends JpaRepository<Group, Long> {
    @Transactional
    void deleteByName(String name);
    @Transactional
    Group findByName(String name);
}

Service

@Service
public class GroupsServiceImpl implements GroupsService {
    @Autowired
    private GroupRepository groupRepository;
    public List<Group> getGroups() {
        return groupRepository.findAll();
    }
    public boolean addGroup(String nameGroup) {
        Group group = groupRepository.findByName(nameGroup);
        if(group == null) {
            groupRepository.saveAndFlush(new Group(nameGroup));
            return true;
        } else {
            return false;
        }
    }
    public boolean changeNameGroup(String oldName, String newName) {
        Group oldGroup = groupRepository.findByName(oldName);
        Group newGroup = groupRepository.findByName(newName);
        if(oldGroup != null && newGroup == null){
            oldGroup.setName(newName);
            groupRepository.save(oldGroup);
            return true;
        } else {
            return false;
        }
    }
    public boolean removeGroup(String nameGroup) {
        Group group = groupRepository.findByName(nameGroup);
        if(group != null) {
            groupRepository.deleteByName(nameGroup);
            return true;
        } else {
            return false;
        }
    }
}

На подобии этого существуют такие же классы и для Users. Можеть кто-нибудь подскажет как это возможно осуществить...

Answer 1

Вижу 2 варианта:

В UserRepository определить метод:

@Query("SELECT COUNT(user) FROM Users user WHERE user.groupId=:groupId")
public int countUserInGroup(int groupId);

В классе Group описать это отношение и написать метод:

Set<User> users;
public int getCountUsers(){
   return users.size();
}
READ ALSO
АОП в Java Spring

АОП в Java Spring

Здравствуйте, возник проблемы с использованием АОП в JavaНикак не могу понять, почему не работает логгирование, уже все перепробовал

177
Перемены и методы в java

Перемены и методы в java

Написал код, который выполняет такие задания как: 1)Вывести последний символ числа(число должно состоять из трёх цифр)2)Вывести десяток из числа(число...

385
Ошибка при создании элемента при помощи WindowManager( BadTokenException )

Ошибка при создании элемента при помощи WindowManager( BadTokenException )

Пытаюсь создать элемент поверх всех активити, получаю ошибку

235