有A(id,type)、B(id,tid,tname)两张表,id都是自增长。
我想让A表type对应B表tid,
查询后结果让A.B.tname来取值,
JPA注解该怎么写(写在类里的),
hql怎么写

解决方案 »

  1.   

    A:
    @ManyToOne
    @JoinColumn(name="id", referencedColumnName="tid")
    public B b;
      

  2.   

    楼主没有明确告诉A和B是一对一还是多对一,另外应该是A.id对应B.tid吧?这样才是主外键关联啊。
    如果是按多对一,代码如下(一对一与之也差不多):A.javaprivate Integer id;@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy="tid")
    private List<B> bs = new ArrayList<B>(0);//getter && setter 略
    B.javaprivate Integer id;@ManyToOne(cascade=CascadeType.REFRESH)
    @JoinColumn(name="tid")
    private A tid;private String tname;//getter && setter 略
      

  3.   

    7楼的是正确,我顺便给你回答你另一个问题。(依赖7楼的注解)
    不知道你的意思是不是通过B的tname得到对象A,若这样的话,下面就是答案:
    String hql = "select b.tid from B b where b.tname=?1"
      

  4.   

    不是
    是这样:
    查询后结果让A.B.tname来取值
    显示结果这么a.b.tname来取值tname 从A表取B表的tname值另外,7楼的的注解
    不能a.b.tname来取值啊
      

  5.   

    我是这么写的
    A:@ManyToOne
    @JoinColumn(name="type",referencedColumnName="TID")
    public B getB() {
        return b;
    }
    B:@OneToMany(mappedBy="b",cascade={CascadeType.ALL},fetch=FetchType.LAZY)
    public Set<A> getA() {
    return a;
    }[hql]
    from A a where a.b.tid = ? desc
    查询后没有结果,也不报错,真是急人
      

  6.   

    a.b.tid = ? desc?
    注解中指定的值tid已经是底层数据库中的了,而from A却是Hibernate工具面向A、B这个类,所以这样肯定不行,应该就是直接a.b=?
    然后在query.setParameter(0, b);
    其中b就是B类对象(例如b=new B(1);)
      

  7.   

    本来是可以的,貌似这是hibernate的一个bug。你换成TopLink应该是可以的