2013-12-03 5 views
1

У меня проблема с тем, что мой Hibernate делает предположения о том, что вызывать столбцы.Hibernate отключает поведение по умолчанию

В частности, когда я делаю поле @ManyToOne, где я ссылаюсь на столбец в другой таблице. Что происходит, так это то, что если я не вношу аннотацию @JoinColumn, он отображает поле с подчеркиванием в его имени.

Например, у меня есть этот класс:

@Entity 
public class User extends AbstractEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    private String username; 
    private String password; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "userFK") 
    private List<TwitterAccount> twitterAccounts; 

    /* GETTERS & SETTERS OMITTED */ 
} 

И тогда у меня есть класс TwitterAccount:

@Entity 
public class TwitterAccount extends AbstractEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    private User userFK; 
} 

Что происходит, что, когда он пытается получить Twitter счета для определенного пользователя , Я получаю исключение: MySQLSyntaxErrorException: Unknown column 'twitteracc1_.userFK_id' in 'field list'

Посмотрите, что он пытается сопоставить userFK с: userFK_id. Конечно, этого не существует! Я не назвал это имя.

Итак, вопрос сводится к: Можно ли отключить эту функцию? (Функциональность, которая превращает имя столбца в поле «field_'foreignkey»)

Я знаю, что с помощью @JoinColumn(name = "userFK") это решило бы, но вместо этого я предпочел бы отключить его.

С уважением

ответ

1

Этого значением по умолчанию, как указано в спецификации JPA

конкатенация следующего: имя из реферирования отношений собственности или поля ссылающегося лица или встраиваемого класс; ""; имя ссылочного столбца первичного ключа . Если нет такой привязки отношения собственности или полей в объекте, или если объединения является для коллекции элементов, имени присоединиться к столбцу формируется как конкатенации следующего: имя объекта; ""; имя ссылочного столбца первичного ключа .

В спящем режиме это реализовано в NamingStrategy, в данном случае EJB3NamingStrategy. Вы можете реализовать свою собственную версию этого решения, которое вы хотите использовать. Но это, вероятно, только усложнит/смущает людей (которые могут ожидать применения стандартов).

+0

Привет, да, я знаю об этом. Но если единственное решение - написать собственную реализацию NamingStrategy, я бы предпочел оставить это. Еще раз спасибо! –

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