Is there a standard way to convert from container to container?

У меня есть два класса 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? Или я что-то пропустил?

11
задан Pascal Thivent 1 September 2010 в 17:32
поделиться

1 ответ

Вот что говорится в спецификации JPA 1.0 об аннотации SequenceGenerator:

9.1.37 SequenceGenerator Annotation

Аннотация SequenceGenerator определяет генератор первичного ключа, который может упоминаться по имени, когда элемент генератора указан для Аннотация GeneratedValue. А генератор последовательности может быть указан в классе объектов или в поле или свойстве первичного ключа. То область действия имени генератора является глобальной к блоку постоянства (во всех типы генераторов).

И сопоставленный суперкласс не является сущностью. Итак, судя по тому, как я прочитал спецификацию, то, что вы хотите сделать, невозможно. Либо сделайте класс Intermed сущностью, либо поместите SequenceGenerator в подклассы.

11
ответ дан 3 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: