У меня есть сущность UserRoot. UserRoot используется для доступа ко всем пользовательским модулям, включая @ElementCollection FriendsList.
, когда я пытаюсь добавить друга в список друзей, после вызова .persist и тестирования из метода, который, кажется, сохраняется у друга,Но я пытаюсь вызвать другую тестовую конечную точку, которая извлекает список и печатает его, и он говорит, что размер равен 0. Я должен пропустить какую-то простую команду при добавлении UserRoot в список друзей. какие-либо предложения? Я попытался объединить данные, я попытался сбросить данные, прежде чем сохранить их, но, похоже, ничего не работает. мне нужно переосмыслить метод, который я использую для добавления друзей?
Следует отметить, что так, как у меня было раньше - работа - список друзей содержал список отдельных идентификаторов из UserRoot, PublicIdentityкоторый на самом деле не был связан с UserRoot, но имел идентификатор, который соответствовал корню пользователя. JPA, похоже, понравился таким образом лучше, но это привело к необходимости искать базу данных в другой раз каждый раз, когда пользователь сделал запрос. Я пытаюсь найти способ обойти это.
это ошибка, которую я получаю при попытке сброса перед совершением:
[http-nio-8080-exec-1] DEBUG o.h.e.j.s.SqlExceptionHelper - could not execute statement [n/a]
java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '40' for key 'UK_th3hlgtbty5m4reql4gqugbc9'
package tech.jdevmin.web.jdevminweb.jpa.friends;
import lombok.Data;
import tech.jdevmin.web.jdevminweb.jpa.user.root.UserRoot;
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Entity
@Data
public class FriendsList implements Serializable {
public static final long serialVersionUID = -3108516247756660434L;
@Id
@GeneratedValue
private Long flID;
@OneToOne
private UserRoot userRoot;
@ElementCollection
private List<UserRoot> usersFriends;
@GeneratedValue
private long listId;
public void addFriend(UserRoot userRoot) {
usersFriends.add(userRoot);
}
public FriendsList(){
usersFriends = new ArrayList<>();
}
}
package tech.jdevmin.web.jdevminweb.jpa.user.root;
import lombok.Data;
import tech.jdevmin.web.jdevminweb.jpa.friends.FriendsList;
import tech.jdevmin.web.jdevminweb.jpa.user.notification.UserAlertModule;
import tech.jdevmin.web.jdevminweb.jpa.user.profile.PublicPost;
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Entity
@Data
public class UserRoot implements Serializable {
@Id
@GeneratedValue
private long userRootId;
@Column
private String identity;
@OneToOne(mappedBy = "userRoot")
@JoinColumn
private UserAccountDetails accountDetails;
@OneToOne(mappedBy = "userRoot")
@JoinColumn
private FriendsList friendsList;
@OneToOne(mappedBy = "userRoot")
@JoinColumn
private UserAlertModule userAlertModule;
@ElementCollection
private List<PublicPost> publicPosts;
public UserRoot(){
publicPosts = new ArrayList<>();
}
public PublicPost addPost(PublicPost publicPost) {
publicPosts.add(publicPost);
return publicPost;
}
}
@Override
public void acceptFriendRequest(long id, UserRoot currentlyActiveUserRoot) {
String currentlyActiveUserRootIdentity = currentlyActiveUserRoot.getIdentity();
log.info("currentlyActiveUserRootIdentity = {}", currentlyActiveUserRootIdentity);
log.info("alertId to accept is = {}", id);
log.info("accepting friend request ....");
UserAlert alert = userMessagingService.acknowledgeAlert(id);
String usernameToAdd = alert.getFromUsername();
log.info("username to add = {}", usernameToAdd);
String pidToAdd = alert.getSubject();
log.info("finding user in userRootRepository by username = {}", usernameToAdd);
UserRoot friendToAdd = userAccountAccessService.accessAccount(usernameToAdd);
log.info("geting friends list from friend to add");
FriendsList friendsFriendsList = friendToAdd.getFriendsList();
log.info("getting currently active user root , getting friends list");
FriendsList currentlyActiveUsersFriendsList = currentlyActiveUserRoot.getFriendsList();
// beginning transaction
log.info("beginning first transaction -- add self to New Friends' Friends List >");
entityManager.getTransaction().begin();
log.info("adding current user to friends' friends list ....");
friendsFriendsList.addFriend(currentlyActiveUserRoot);
log.info("committing first transaction");
entityManager.getTransaction().commit();
log.info("beginning second transaction");
entityManager.getTransaction().begin();
log.info("adding friend to friends list");
currentlyActiveUsersFriendsList.addFriend(friendToAdd);
log.info("committing second transaction ....");
entityManager.getTransaction().commit();
log.info("second transaction successfully committed!");
log.info("beginning test >");
log.info("CURRENTLY ACTIVE USER ROOTS FRIENDS LIST CONTENTS: \n");
String currentIdentity = currentlyActiveUsersFriendsList.getUserRoot().getIdentity();
log.info("current identity: {}",currentIdentity);
currentlyActiveUsersFriendsList.getUsersFriends().forEach(friend->
System.out.println(friend.getIdentity()));
String friendsIdentity = friendsFriendsList.getUserRoot().getIdentity();
log.info("friends identity = {}",friendsIdentity);
friendsFriendsList.getUsersFriends().forEach(friend->
System.out.println(friend.getIdentity()));
log.info("test complete");
log.info("accept friend request complete! returning ....");
}