论坛首页 Java企业应用论坛

有一个关于Hibernate配置的问题

浏览 3488 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-02  
我是使用Annontation mapping的,
有一个父类叫TeacherRefBase,定义如下:
@MappedSuperclass
class TeacherRefBase implements Serializable {

    ..........
   
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public long getId() {
        return id;
    }

    @ManyToOne(targetEntity=Teacher.class)
    @JoinColumn(name="teacherId")
    @NotNull
    public Teacher getTeacher() {
        return teacher;
    }
}
这里把TeacherRefBase join到 Teacher。
然后在来一个

@MappedSuperclass
class TeacherRef implements Serializable {

    ..........
   
    public String getName() {
        return name;
    }
   
    public int getAge() {
        return age;
    }

    @OneToOne(targetEntity=Teacher.class)
    @JoinColumn(name="teacherId")
    @NotNull
    public Teacher getTeacher() {
        return teacher;
    }
}

最后来个
@Entity
@Table(name="WorkHistory")
public class WorkHistory extends TeacherRef {
    
    ........

}

这个时候启动的时候就报错
Duplicate property mapping of teacher found in WorkHistory

请问这个问题 怎么解决?
   发表时间:2007-11-10  
我发现Hibernate使用标注德时候,继承时不能重写某一个属性。现在我的解决方法是把父类的getTeacher声明未@Transtimt,然后在子类重新声明Hibernate标注。
0 请登录后投票
   发表时间:2007-11-11  
还有一个问题就是MappedSuperclass标注的父类的属性在DWR中是取不到了,不知道有办法解决没有?
0 请登录后投票
   发表时间:2007-11-12  
[quote="liangguanhui"]我发现Hibernate使用标注德时候,继承时不能重写某一个属性。现在我的解决方法是把父类的getTeacher声明未@Transtimt,然后在子类重新声明Hibernate标注。[/quote]


继承时如果使用Hibernate扩展可以重写某一个属性的,比如:


@MappedSuperclass
public abstract class Father{
 
    //要在子类被重写的属性
    @Column(name = "name")
    private String name;
 
    //set, get就省略了
}


@Entity
@Table(name = "tbl_sub")
//重写开始
@AttributeOverride(name = "name", column = @Column(name = "sub_name"))
public class Sub extend Father{

    //子类的其它属性

}

在这里,子类继承了父类的name属性,但映射的表tbl_sub不是与之对应的"name"字段,是复写的"sub_name"字段.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics