2014-10-14 1 views
0

Я хочу преобразовать существующий файл hbm в объект JPA через аннотации. следующее код HBM я хочу, чтобы преобразовать его в аннотации:Hibernate JPA как преобразовать атрибут hbm индекса списка в аннотации?

<list name="typesCourriers" table="TYPES_COMPARUTIONS2TYPES_COURRIERS" inverse="false"> 
      <key foreign-key="TYPE_COURRIER_TYPES_COMPARUTIONS_FKC"> 
       <column name="TYPES_COMPARUTIONS_FK" sql-type="BIGINT"/> 
      </key> 
      <list-index column="TYPE_COMPARUTION_COURRIER_TYPES_COURRIERS_IDX"/> 
      <many-to-many class="TypeCourrier" foreign-key="TYPE_COMPARUTION_COURRIER_TYPES_COURRIEC"> 
       <column name="TYPES_COURRIERS_FK" sql-type="BIGINT"/> 
      </many-to-many> 
     </list> 

моя проблема с атрибутом списка индекса, я пытался использовать индексы элемента в JoinTable но получил исключение

@ManyToMany(cascade = {CascadeType.ALL},fetch = FetchType.EAGER) 
    @JoinTable(name = "TYPES_COMPARUTIONS2TYPES_COURRIERS",indexes = { @Index(columnList="TYPE_COMPARUTION_COURRIER_TYPES_COURRIERS_IDX", name="TYPE_COMPARUTION_COURRIER_TYPES_COURRIERS_IDX") } ,joinColumns = { 
      @JoinColumn(name = "TYPES_COMPARUTIONS_FK", nullable = false, updatable = false) }, 
      inverseJoinColumns = { @JoinColumn(name = "TYPES_COURRIERS_FK", nullable = false, updatable = false) }) 
    private Set<TypeCourrier> typeCourriers= new HashSet<TypeCourrier>(); 

Тест Единица измерения:

@Test 
    public void test() { 
     TypeComparutionCourrier typeComparutionCourrier=repository.findOne(new Long(1)); 
    System.out.println(typeComparutionCourrier); 
    for(TypeCourrier typeCourrier:typeComparutionCourrier.getTypeCourriers()) 
    { 
     System.out.println(typeCourrier); 
    } 
    typeComparutionCourrier.getTypeCourriers().add(typecourrierrepository.findOne(new Long(9))); 
    System.out.println(("*********")); 
    for(TypeCourrier typeCourrier:typeComparutionCourrier.getTypeCourriers()) 
    { 
     System.out.println(typeCourrier); 
    } 
    repository.save(typeComparutionCourrier); 
    } 

Я получил это исключение

Caused by: org.hibernate.AnnotationException: Unable to create unique key constraint (TYPE_COMPARUTION_COURRIER_TYPES_COURRIERS_IDX) on table TYPES_COMPARUTIONS2TYPES_COURRIERS: database column 'TYPE_COMPARUTION_COURRIER_TYPES_COURRIERS_IDX' not found. Make sure that you use the correct column name which depends on the naming strategy in use (it may not be the same as the property name in the entity, especially for relational types) 
    at org.hibernate.cfg.Configuration.buildUniqueKeyFromColumnNames(Configuration.java:1682) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1457) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) 
    ... 62 more 
+0

Существует ли столбец TYPE_COMPARUTION_COURRIER_TYPES_COURRIERS_IDX на столе TYPES_COMPARUTIONS2TYPES_COURRIERS? – CoverosGene

+0

@CoverosGene Да, существует – Moussi

ответ

0

Я думаю, что вам нужно @OrderColumn

@OrderColumn(name="TYPE_COMPARUTION_COURRIER_TYPES_COURRIERS_IDX") 
@ManyToMany(cascade = {CascadeType.ALL},fetch = FetchType.EAGER) 
@JoinTable(name = "TYPES_COMPARUTIONS2TYPES_COURRIERS",indexes = { joinColumns = { 
     @JoinColumn(name = "TYPES_COMPARUTIONS_FK", nullable = false, updatable = false) }, 
     inverseJoinColumns = { @JoinColumn(name = "TYPES_COURRIERS_FK", nullable = false, updatable = false) }) 
private Set<TypeCourrier> typeCourriers= new HashSet<TypeCourrier>(); 
+0

Я получил это исключение. Вызывается: java.sql.SQLException: Поле 'TYPE_COMPARUTION_COURRIER_TYPES_COURRIERS_IDX' не имеет значения по умолчанию – Moussi

+0

Попробуйте добавить 'nullable = false' в' @ OrderColumn'. – zeroflagL

+0

У меня такое же исключение – Moussi

 Смежные вопросы

  • Нет связанных вопросов^_^