Исправлено соглашение об именах для удаления символов подчеркивания из Hibernate JPA.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Исправлено соглашение об именах для удаления символов подчеркивания из Hibernate JPA.

Сообщение Anonymous »

Почему JPA/Hibernate добавляет имя дочернего класса к имени родительского класса user_profile_id? С другой стороны, почему он принимает loginCount и преобразуется в логин_count в змеином регистре?
У нас есть класс UserProfile, который расширяет BaseModel с помощью идентификатора столбец определен. Без каких-либо изменений он добавлял имя класса к идентификатору. (

Код: Выделить всё

user_profile_id).  Мне нужен был просто идентификатор
в таблице. Когда я изменил стратегию именования, эта проблема, похоже, была решена, но возникла другая.
С внесением следующего изменения: Он использовал идентификатор, но в качестве login_count использовался обычный UserProfile из loginCount
Для проверки Я настроил имена для обоих и вижу LoginCount, но получаю следующую ошибку.

Код: Выделить всё

Caused by: java.sql.SQLException: Field 'login_count' doesn't have a default value
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121)
Как MySQL сообщает, что столбец не определен? Хотя JPA SQL выглядит правильно.

Код: Выделить всё

 Hibernate: insert into user_profile (Created, Updated, UserCreated, UserUpdated, Account_notes, Admin, CancellationTxId, City, Country, CustomerNumber, Email, ExternalId, FirstName, Group_Id, Image_Id,  LastLogin, LastName, LastSyncedToCrm, **LoginCount**, Password, PayerEmail, Phone, Prefs_Id, Role_name, Role, State, Status, Street, Subscription_Id, SyncedToCrm, Timezone, Zip, Id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
pom.xml

Код: Выделить всё


org.springframework
spring-framework-bom
5.3.37
pom
import


org.springframework.security
spring-security-bom
5.8.13
pom
import


org.springframework.data
spring-data-bom
2021.2.18
import
pom




com.mysql
mysql-connector-j
8.4.0


org.hibernate.javax.persistence
hibernate-jpa-2.1-api
1.0.2.Final



org.hibernate
hibernate-core
5.6.15.Final

настойчивость Базовая модель

Код: Выделить всё

@MappedSuperclass
@JsonIgnoreProperties({ "created", "updated", "userUpdated", "formattedCreated"})
public abstract class BaseModel {
@Id
protected String id = UUID.randomUUID().toString();
Профиль пользователя

Код: Выделить всё

@Entity
@Table(name="user_profile")
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id",scope=UserProfile.class)
@JsonIgnoreProperties({ "created", "userCreated", "updated", "userUpdated", "formattedCreated", "syncedToCrm", "loginCount", "subscriptionCustomerId", "lastSyncedToCrm", "payerEmail", "cancellationTxId", "lastLogin", "password"})
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class UserProfile extends BaseModel {\
@Column(name="logincount")
private int loginCount = 0;
ImplicitNamingStrategy

Код: Выделить всё

public class ImplicitNamingStrategy extends ImplicitNamingStrategyJpaCompliantImpl {
@Override
public Identifier determineBasicColumnName(ImplicitBasicColumnNameSource source) {
String originalName = source.getAttributePath().getFullPath();
String newName = getNewName(originalName);
System.out.println("Implicit: " + originalName + " -> " + newName);
return new Identifier(newName, false);
}
private static String getNewName(String originalName) {
return StringUtils.left(originalName, 1).toUpperCase() + originalName.substring(1, originalName.length());
}
}
Физическая стратегия именования

Код: Выделить всё

public class PhysicalNamingStrategy extends PhysicalNamingStrategyStandardImpl {
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
String originalName = name.getText();
String newName = StringUtils.left(originalName, 1).toUpperCase() + originalName.substring(1, originalName.length());
System.out.println("Physical " + originalName + " -> " + newName);
return new Identifier(newName, false);
}
}
ОБНОВЛЕНИЕ:
Я пробовал использовать комбинации стратегий именования, регистр имен @Column и даже переименовывать поле в logincount. По-прежнему выдает ту же ошибку в Amazon Aurora MySQL в AWS. Оба с MySQL версии 5 и 8. И как старый, так и новый код (вставлен выше). Любая помощь будет очень полезна.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ernate-jpa
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему «placeholder-shown: без подчеркивания» работает, а «placeholder: без подчеркивания» — нет?
    Anonymous » » в форуме CSS
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Каково соглашение об именах расширений файлов для модулей С++ 20?
    Anonymous » » в форуме C++
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Каково соглашение об именах подпакетов проектов Android Studio? (БЕЗУМНЫЙ)
    Anonymous » » в форуме Android
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Соглашение об именах для вложенных объектов REST запроса/ответа
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Соглашение об именах C# Selenium для IWebElement с параметром
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»