У нас есть класс UserProfile, который расширяет BaseModel с помощью идентификатора столбец определен. Без каких-либо изменений он добавлял имя класса к идентификатору. (
Код: Выделить всё
user_profile_id). Мне нужен был просто идентификаторС внесением следующего изменения:
Код: Выделить всё
Для проверки Я настроил имена для обоих и вижу 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)
Код: Выделить всё
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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)Код: Выделить всё
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;
Код: Выделить всё
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