используя встроенный тип идентификатора дважды в объекте - PullRequest
0 голосов
/ 08 января 2019

В моем проекте весенней загрузки у меня есть пользовательский тип для поля ID моей сущности. Я могу использовать тип с помощью @Embeddable и @EmbeddedId.

Но когда я хочу добавить еще одно поле с таким же типом в одну сущность, я получаю исключение для сопоставления столбцов следующим образом:

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: 
com.example.demo.CarEntity column: id (should be mapped with insert="false" update="false")

Класс CarId:

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Embeddable
public class CarId implements Serializable {
    private String id;

    @Override
    public String toString() {
        return id;
    }
}

Класс CarEntity:

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Entity
public class CarEntity {

    @EmbeddedId
    private CarId id;

    private String name;

    private CarId anotherId;

}

Класс репозитория:

@Repository
public interface CarRepository extends JpaRepository<CarEntity, CarId> {
}

класс приложения:

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    CommandLineRunner runner(CarRepository repository) {
        return args -> {
            CarId carId = new CarId(UUID.randomUUID().toString());
            String carName = "a car";
            CarEntity carEntity = new CarEntity(carId, carName, carId);
            repository.save(carEntity);
            repository.findAll().forEach(carEntity1 -> {System.out.println(carEntity1.getId());});
        };
    }
}

Как я могу добавить несколько полей одного типа в класс ввода?

1 Ответ

0 голосов
/ 08 января 2019

Я нашел решение переопределить имя поля на anotherId следующим образом:

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Entity
public class CarEntity {

    @EmbeddedId
    private CarId id;

    private String name;

    @Embedded
    @AttributeOverride(name="id", column = @Column(name = "anotherId"))
    private CarId anotherId;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...