Issue
I am having an issue where columns are getting renamed to snakecase. Sadly I can not rename the columns since I am creating a 3rd party tool to work on software developed for us by another company. I have googled / searched SO and tried all sorts of fixes. I am a noob at spring / JPA/ hibernate and some help would be greatly appreciated. Using IntelliJ Ultimate if that matters.
Edit: Might help if I include the error I am getting.
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'birth_date'.
Entity
package net.glmhc.dmhwebservices.entities;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Type;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import org.hibernate.annotations.Cache;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
@Entity
@Table(name = "Clients")
@Cache(usage = CacheConcurrencyStrategy.NONE)
@NamedQueries({@NamedQuery(name = "Client.findById", query = "SELECT c FROM Clients c WHERE c.id = :id")
,@NamedQuery(name = "findGenderById", query = "SELECT c FROM Codes c WHERE c.id = :id")})
public class Clients{
@Id
@Column(columnDefinition = "char(36)")
private String id;
@CreatedBy
@Column(name = "CreateUser", columnDefinition = "char(36)")
private String createUser;
@CreatedDate
@Column(name = "CreateDate")
private LocalDateTime createDate;
@LastModifiedBy
@Column(name = "UpdateUser", columnDefinition = "char(36)")
private String updateUser;
@LastModifiedDate
@Column(name = "UpdateDate")
private LocalDateTime updateDate;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = false)
private final Set<ClientNames> clientNames = new HashSet<>();
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = false)
private final Set<ClientAddresses> clientAddresses = new HashSet<>();
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = false)
private final Set<ClientEmails> clientEmails = new HashSet<>();
@Column(name = "ClientCode")
private String clientCode;
@Column(name = "AlternateClientCode")
private String alternateClientCode;
@Column(name = "BirthDate")
private LocalDate birthDate;
public Clients(String id, String createUser, LocalDateTime createDate, String updateUser, LocalDateTime updateDate, String clientCode, String alternateClientCode, LocalDate birthDate, boolean declinedEthnicity, boolean declinedLanguage, boolean declinedRace, String mpi, String preferredName, String ssn, Codes genderCodes, String rcopiaId, boolean memoHasHighImportance, String memo, String profileImageId, boolean confidentialClient, String maritalStatus, String stateReportingEthnicity, String veteranStatus, String legalStatus, String employmentStatus, String livingArrangement, String incomeSource, LocalDate livingArrangementLastChanged, Integer grossMonthlyIncome, Integer householdSize, String appUser, Long mendWardId, String genderIdentity, String religiousPreference, String sexualOrientation, String genderAtBirth, String preferredPronouns, String uniqueStateIdentifier) {
this.id = id;
this.createUser = createUser;
this.createDate = createDate;
this.updateUser = updateUser;
this.updateDate = updateDate;
this.clientCode = clientCode;
this.alternateClientCode = alternateClientCode;
this.birthDate = birthDate;
}
public Clients() {
}
@Override
public String toString() {
return "Clients{" +
"id='" + id + '\'' +
", createUser='" + createUser + '\'' +
", createDate=" + createDate +
", updateUser='" + updateUser + '\'' +
", updateDate=" + updateDate +
", clientNames=" + clientNames +
", clientAddresses=" + clientAddresses +
", clientEmails=" + clientEmails +
", clientCode='" + clientCode + '\'' +
", alternateClientCode='" + alternateClientCode + '\'' +
", birthDate=" + birthDate +
'}';
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCreateUser() {
return createUser;
}
public void setCreateUser(String createUser) {
this.createUser = createUser;
}
public LocalDateTime getCreateDate() {
return createDate;
}
public void setCreateDate(LocalDateTime createDate) {
this.createDate = createDate;
}
public String getUpdateUser() {
return updateUser;
}
public void setUpdateUser(String updateUser) {
this.updateUser = updateUser;
}
public LocalDateTime getUpdateDate() {
return updateDate;
}
public void setUpdateDate(LocalDateTime updateDate) {
this.updateDate = updateDate;
}
public Codes getGenderCodes() {
return genderCodes;
}
public void setGenderCodes(Codes genderCodes) {
this.genderCodes = genderCodes;
}
public Set<ClientNames> getClientNames() {
return Collections.unmodifiableSet(clientNames);
}
public Optional<ClientNames> getConfidentialName() {
return clientNames.stream().filter(ClientNames::getConfidentialClient).findFirst();
}
public Optional<ClientNames> getNonAliasName() {
return clientNames.stream().filter(clientNames -> !clientNames.getAlias()).findFirst();
}
public Set<ClientAddresses> getClientAddresses() {return Collections.unmodifiableSet(clientAddresses);}
public Set<ClientEmails> getClientEmails() { return Collections.unmodifiableSet(clientEmails); }
public String getClientCode() {
return clientCode;
}
public void setClientCode(String clientCode) {
this.clientCode = clientCode;
}
public String getAlternateClientCode() {
return alternateClientCode;
}
public void setAlternateClientCode(String alternateClientCode) {
this.alternateClientCode = alternateClientCode;
}
public LocalDate getBirthDate() {
return birthDate;
}
public void setBirthDate(LocalDate birthDate) {
this.birthDate = birthDate;
}
}
}
application.yml
spring:
jpa:
show-sql: true
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
hibernate:
dialect: org.hibernate.dialect.SQLServer2008Dialect
properties:
datasource:
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://localhost:1433/;databaseName:DBNAME
username: sa
password:
Solution
Turns out the context of my application was being bypassed as I was not using all of spring boot and partially creating my own context. Rebuilding the context to work more in line with spring boot made it pick up the proper configuration from applicatiom.yml.
Answered By - Noobiedamus