я задаюсь вопросом, как я смог бы аннотировать интерфейс
@Entity
@Table(name = "FOLDER_TABLE")
public class Folder implements Serializable, Hierarchy {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "folder_id", updatable = false, nullable = false)
private int fId;
@Column(name = "folder_name")
private String folderName;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "FOLDER_JOIN_FILE_INFORMATION_TABLE", joinColumns =
{ @JoinColumn(name = "folder_id") }, inverseJoinColumns =
{ @JoinColumn(name = "file_information_id") })
private List< Hierarchy > fileInformation = new ArrayList< Hierarchy >();
}
выше и ниже 2 класса, которые реализуют интерфейс под названием Иерархия, класс папки имеет список Hierarchyies, являющегося папкой или fileinformation классом
@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 ieId;
@Column (name = "location")
private String location;
}
Я искал сеть некоторым образом для аннотирования или обходное решение, но я не могу отобразить интерфейс, который является просто этим
public interface Hierarchy {
}
Я получаю отображающееся исключение в Списке иерархий с папкой, но я не знаю, как отобразить класс правильно.
Обнаружен небольшой поиск в Google ...
Вы можете использовать внутренние интерфейсы, но вы не можете отображать интерфейсы в hibernate , вам нужно сопоставлять классы, независимо от , используете ли вы сопоставление xml или сопоставление аннотаций . hibernate обрабатывает жизненный цикл ваших постоянных объектов, поэтому ему необходимо знать, какой класс нужно создать, поэтому вам нужно предоставить ему эту информацию ... Я я даже не знаю, как будет выглядеть то, что вы предлагаете ? как бы вы обеспечили реализацию для данного интерфейса перехода в спящий режим во время выполнения для создания экземпляра?
http://forum.springsource.org/showthread.php?t=67420
Похоже, вам не повезло.
Вы можете отображать интерфейсы в Hibernate как часть иерархии наследования. Это вполне возможно с помощью преобразования XML, как это описано, среди прочего, в главе 9 справочника Hibernate .
Отображение на основе аннотаций - это совсем другая история. Я не очень знаком с этим, но Java Persistence with Hibernate также включает примеры для этого. В соответствии с вашим случаем это будет выглядеть так:
@MappedSuperclass
public interface Hierarchy {
}
@Entity
@Table(name = "FOLDER_TABLE")
public class Folder implements Serializable, Hierarchy { ... }
@Entity
@Table(name = "FILE_INFORMATION_TABLE")
public class FileInformation implements Serializable, Hierarchy { ... }
Это отображение будет использовать таблицу для каждого конкретного класса с неявным полиморфизмом.
Однако другие источники предполагают, что поддержка аннотаций для интерфейсов, возможно, еще не работает / не стабильна:
@Entity
с интерфейсов, который также включает некоторые исправления Возможно, вам придется поэкспериментировать, в том числе изменить стратегию сопоставления наследования, возможно, превратить интерфейс в абстрактный класс (если это возможно - поскольку класс может расширять только один базовый класс) ...
{{1 }}