java - 有关 hibernate 复合模式的帮助

标签 java database hibernate gwt annotations

所以我卡住了,我正在创建一个 gwt web 应用程序,我将使用树(gwt 树和 TreeItems)结构来显示文件夹列表(类文件夹)和文件(类 FileLocation)、文件夹和文件位置class 将基于复合模式实现一个 Hierarchy 接口(interface)。但我正在使用 hibernate 来存储我的数据,并且我正在使用注释将数据映射到数据库。我的麻烦是我不知道如何注释我的界面。

有没有人在使用 hibernate 持久化数据时使用过复合模式

public interface Hierarchy(){
// a few abstract methods that will be implemented by the sub classes
 }


@Entity
@Table()
public class Folder implements Serializable, Hierarchy {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "folder_id", updatable = false, nullable = false)
private int id;
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name = "FOLDER_FILELOCATION", joinColumns = { 
        @JoinColumn(name = "folder_id") }, inverseJoinColumns = { 
        @JoinColumn(name = "file_information_id") })
private List<Hierarchy> children = new ArrayList<Hierarchy>() ;
@Column(name = "folder_name")
private String folderName;
@Column(name = "tree_item")
private TreeItem item;
@Column (name = "parent")
private Hierarchy parent;



@Entity
@Table(name = "FILE_INFORMATION_TABLE")
public class FileInformation implements Serializable, Hierarchy {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "file_information_id", updatable = false, nullable = false)
private int fiId;
@Column (name = "location")
private String location;
@Column(name = "tree_item")
private TreeItem item;
@Column (name = "parent")
    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
    @JoinTable(name="FOLDER_FILELOCATION",
    joinColumns = @JoinColumn(name="filelocation_id"),
    inverseJoinColumns = @JoinColumn(name="folder_ID"))  
private Hierarchy parent;

最佳答案

查看 hibernate 文档和 This Book 后我能够找到解决问题的方法。我暂时无法使用带有 JPA 注释的接口(interface)。所以我使用了一个带有支持继承的映射的抽象类。在此示例中,我使用单个表来存储所有值。但我会考虑将它们分开。

@Entity
@Table(name ="HIERARCHY")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(
    name = "HIERARCHY_TYPE", discriminatorType = DiscriminatorType.STRING)      
public abstract class  Hierarchy implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "hierarchy_id", updatable = false, nullable = false)
private int hId;



@Entity
@DiscriminatorValue("F")
public class Folder extends Hierarchy  {

@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name = "FOLDER_JOIN_FILELOCATION", joinColumns = { 
        @JoinColumn(name = "folder_id") }, inverseJoinColumns = { 
        @JoinColumn(name = "file_information_id") })
private List<Hierarchy> children = new ArrayList<Hierarchy>() ;
@Column(name = "folder_name")
private String folderName;
//@Column(name = "tree_item")
//private TreeItem item;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
   @JoinTable(name="FOLDER_JOIN_FOLDER",
        joinColumns = @JoinColumn(name="parent_folder_id"),
        inverseJoinColumns = @JoinColumn(name="folder_ID")
    ) 
private Hierarchy parent;




@Entity
@DiscriminatorValue("FI")
public class FileInformation extends Hierarchy  {


@Column (name = "location")
private String location;
//@Column(name = "tree_item")
//private TreeItem item;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
   @JoinTable(name="FILEINFORMATION_JOIN_FOLDER",
        joinColumns = @JoinColumn(name="filelocation_id"),
        inverseJoinColumns = @JoinColumn(name="folder_ID")
    )  
private Hierarchy parent;

关于java - 有关 hibernate 复合模式的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2603742/

相关文章:

mysql - 主键默认值可以为 NULL 吗?为什么这样描述呢?

java - 如何在jdbi中实现审计拦截器?

java - Hibernate多态性

database - 动态数据库 - 包括和排除文件

mysql - 重新排列 mysql 表

java - OnetoOne 关系案例中的唯一行。如何防止重复?

Java:为什么我的程序会输出不正确的 else 语句?

java - 将所有外文字符串数字转换为英文数字字符串

java - 无法从 BaseGameActivity 类型对非静态方法 getApiClient() 进行静态引用

java - 在Java中查找最小、最大和中间值