簡體   English   中英

使用注釋在休眠中左連接

[英]left join in hibernate using annotation

我有兩個表如下

@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();
        }

但是,當我嘗試運行它時,它給了我空指針異常。 任何人都有想法,請幫助我。

嘗試這個:

session.createQuery("FROM Booking_Basic as b left join b.organizer_basic as o");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM