Я создаю своего рода сайт социальной сети, такой как Facebook, как университетский проект. Пользователи могут загружать фотографии, но я почему-то не могу получить список фотографий для конкретного пользователя.
Вот как я это делаю прямо сейчас:
@Entity
@Table(name = "users")
public class User implements Serializable {
@Id
private String emailAddress;
private String password;
private String firstName;
private String lastName;
(...)
@OneToMany(mappedBy = "owner", fetch = FetchType.EAGER)
private List<Photo> photos;
public User() {
}
(...)
public void addPhoto( Photo photo){
photos.add(photo);
}
public List<Photo> getPhotos() {
return photos;
}
}
А вот объект "Фото":
@Entity
public class Photo implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String url;
private String label;
@ManyToOne
private User owner;
public Photo() {
}
(...)
public User getOwner() {
return owner;
}
}
Каждая фотография загружается путем создания поста, который содержит ее. Вот EJB, который делает это:
@Stateless
public class PublicPost implements PublicPostRemote {
@PersistenceContext
EntityManager em;
@Override
public void createPost(LoginUserRemote loginUserBean, String targetEmail, final String content, final String photoURL) {
if (loginUserBean.isLoggedIn()) {
final User author = loginUserBean.getLoggedUser();
System.out.println(targetEmail);
final User target = em.find(User.class, targetEmail);
if (author != null && target != null) {
//See if there's a photo to post as well
Photo photo = null;
if (photoURL != null) {
photo = new Photo(photoURL, author, content);
em.persist(photo);
}
MessageBoard publicMessageBoard = target.getPublicMessageBoard();
Post post = new Post(author, content);
post.setMessageBoard(publicMessageBoard);
if (photo != null) {
post.setPostPhoto(photo);
}
em.persist(post);
em.refresh(publicMessageBoard);
//Send an e-mail to the target (if the author and the target are different)
if (!author.getEmailAddress().equals(target.getEmailAddress())) {
final String subject = "[PhaseBook] " + author.getEmailAddress() + " has posted on your public message board.";
Thread mailThread = new Thread() {
@Override
public void run() {
try {
GMailSender.sendMessage(target.getEmailAddress(), subject, content);
} catch (MessagingException ex) {
Logger.getLogger(PublicPost.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
mailThread.start();
}
}
}
}
}
Итак, что происходит: я создаю новый пост, содержащий фотографию, но позже, когда я использую это, на веб-уровне ...
LoginUserRemote lur = (LoginUserRemote)session.getAttribute("loginUserBean");
User user = lur.getLoggedUser();
List<Photo> photos = user.getPhotos();
System.out.println();
System.out.println("This user has this many photos: " + photos.size());
... это всегда говорит мне, что у пользователя 0 фотографий. Почему это? Я неправильно определяю отношения между пользователем и фотографией? Я забыл что-то сохранить / обновить? Или проблема кроется где-то еще?