【问题标题】:Java Hibernate Annotation @JoinTable RelationshipsJava Hibernate 注解@JoinTable 关系
【发布时间】:2012-07-13 12:23:46
【问题描述】:

我最近开始使用 Hibernate,并试图了解所有注释并确保我做事正确。我有两个类似于下面的表'user'和'user_friends'

+------+------+-------+
| id   | name | email |
+------+------+-------+

和用户好友表

+--------+---------+----------+
| userid | buddyid | accepted |
+--------+---------+----------+

现在在 SQL 中,我运行了一个类似于

的查询
SELECT u.id AS id, u.name AS username, u.email AS email FROM user_friends 
INNER JOIN users AS u ON u.id = '1' WHERE buddyid = '2' AND ACCEPTED = 1 UNION ALL 
SELECT u.id as id, u.name AS username, u.email AS email FROM user_friends
INNER JOIN users AS u ON u.id = '2' WHERE buddyid = '1' AND ACCEPTED = 1;

我在 Java 中设置了两个类,其方式与此类似

@Entity
@Table(name="users")
public class User {

  @Id
  @GeneratedValue
  private int id;

  private int name;
  private int email;

  @OneToMany(fetch=UserBuddy.class, mappedBy="user", fetch=FetchType.LAZY)
  @JoinColumn(name="userid")
  private Set<UserBuddy> _buddies;
}

@Entity
@Table(name="user_friends")
public class UserBuddy {

   @ManyToOne
   @JoinColumn(name="id")
   private User friendId;

   private int id;
   private int name;
   private int email;
}

我不知道我会怎么做,从 user 表中获取 user_friends 的姓名和电子邮件。任何人都可以提供任何帮助吗?

【问题讨论】:

  • 您在 User 类中没有姓名/电子邮件?
  • 是的,并且更新了示例来说明这一点。我可以重新使用 User.class 吗?我不想要存储在那里的所有信息。用户表确实有比这更多的信息,但在这种情况下,我只需要 user_buddy 的姓名和电子邮件。
  • 例如,User 表还包含有关注册日期及其虚拟货币的信息。但我不需要他们的 user_friend 的信息,所以我不认为要重用 User.class

标签: java sql hibernate join


【解决方案1】:

由于您的 UserBuddy 中有 User 对象,因此只需引用它

@Entity
@Table(name="user_friends")
public class UserBuddy 
{

   @ManyToOne
   @JoinColumn(name="id")
   private User friend; // This is a User not an id

   public String getEmail()
   {
     return friend.getEmail();
   }
}

【讨论】:

  • 嘿,为你的回答喝彩。我遇到的问题是 User.class 包含的信息多于 user_buddy 所需的信息。 User_buddy 仅存在于列表中,因此需要的信息很少。 User.class 实际上包含的不仅仅是电子邮件和姓名,这会导致查询返回很多无用的信息。是否有任何注释可以让我只为好友返回选定的信息?
  • 我如何确保只有接受“user_buddies.accepted = 1”的好友才能在 SQL 查询中检索到? :P
  • 您可以将 HQL 用于 Criteria API 来指定您只想要接受的好友,例如“select u from User u fetch join UserBuddy buddy where buddy.accepted = true”
猜你喜欢
  • 1970-01-01
  • 2014-08-22
  • 2012-06-03
  • 2020-08-05
  • 1970-01-01
  • 2016-05-07
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多