У меня есть два класса A
и B
, и неявное преобразование существует оператор для перехода от одного к другому, так что:
A a;
B b;
b = a; // Works
Существует ли стандартный способ преобразования std :: list
в std :: list
? (Или даже от std :: vector
до std :: list
).
Я знаю, что могу пройти по списку и построить второй перечислить элемент за элементом, но мне интересно, есть ли более элегантное решение.
К сожалению Я не могу использовать boost
, но из любопытства в качестве бонусного вопроса, если boost справится с этим, я ' Я тоже буду счастлив узнать, как это сделать.
открытый абстрактный класс BaseEntity {@Id @GeneratedValue (strategy = GenerationType.SEQUENCE, generator = "seqGenerator") private Long id; ...
У меня следующая структура моих сущностей:
@MappedSuperclass
public abstract class BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGenerator")
private Long id;
}
@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@SequenceGenerator(name = "seqGenerator", sequenceName = "DICTIONARY_SEQ")
public abstract class Intermed extends BaseEntity {}
@Entity
public class MyEntity1 extends Intermed {}
@Entity
public class MyEntity2 extends Intermed {}
И я получил следующее исключение:
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'sessionFactory' defined in class path resource [context/applicationContext.xml]:
Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Unknown Id.generator: seqGenerator
Когда я меняю @MappedSuperclass на @Entity в классе Intermed, все работает нормально. Есть ли проблемы с использованием @MappedSuperclass и @SequenceGenerator? Или я что-то пропустил?
Вот что говорится в спецификации JPA 1.0 об аннотации SequenceGenerator
:
9.1.37 SequenceGenerator Annotation
Аннотация
SequenceGenerator
определяет генератор первичного ключа, который может упоминаться по имени, когда элемент генератора указан для АннотацияGeneratedValue
. А генератор последовательности может быть указан в классе объектов или в поле или свойстве первичного ключа. То область действия имени генератора является глобальной к блоку постоянства (во всех типы генераторов).
И сопоставленный суперкласс не является сущностью. Итак, судя по тому, как я прочитал спецификацию, то, что вы хотите сделать, невозможно. Либо сделайте класс Intermed
сущностью, либо поместите SequenceGenerator
в подклассы.