2

我有两个表如下

@Entity
@Table (name="booking_basic")
public class Booking_Basic {

    @Id
    @GeneratedValue
    @Column (name="booking_id")
    private int booking_id;  
    @GenericGenerator(name="foreign", strategy="foreign", parameters={@org.hibernate.annotations.Parameter(name="property", value="organizer_basic")})
    @Column (name="org_id")
    private int org_id;
    @OneToOne(fetch=FetchType.EAGER, optional=true)
    @PrimaryKeyJoinColumn
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})   
    private Organizer_Basic organizer_basic;
        ....

另一个是

@Entity
@Table(name="organizer_basic")
public class Organizer_Basic
{

  @Id
  @GeneratedValue
  @Column(name="org_id")
  private int org_id;

  @Column(name="name")
  private String name;

  @OneToOne(cascade={javax.persistence.CascadeType.ALL}, fetch=FetchType.LAZY, mappedBy="organizer_basic")
  @JoinColumn(name="org_id")  
  private Booking_Basic booking_basic;
 .....

现在我想根据预订 ID 获取所有组织者名称,如果 booking_basic 有 booking_id 1 和 org_id = 15,那么我想访问组织者名称,其中 org_id 是 15。

        Session session = HibernateSessionFactory.getSessionFactory().openSession();
        Transaction transaction = null;
        try {
          transaction = session.beginTransaction();
          Query query = session.createQuery("FROM Booking_Basic");
          List<Booking_Basic> booking_basic = query.list();
          for(Booking_Basic b : booking_basic) 
             System.out.print("Booking Type : " + b.getOrganizer_basic().getName());
          }
          transaction.commit();
        }
        catch (Exception e) {
          e.printStackTrace();
          transaction.rollback();
        }

但是当我尝试运行它时,它给了我空指针异常。任何人有想法,请帮助我。

4

1 回答 1

1

尝试这个:

session.createQuery("FROM Booking_Basic as b left join b.organizer_basic as o");
于 2013-07-11T12:27:20.570 回答