В классе модели у меня есть isActive поле with is boolean, которые представляют собой is_active поле в MySql DB. Вот весь модельный класс:Почему JPA Hibernate изменяет имя поля?
package ca.gatin.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "Account")
public class Account {
@Id
@GeneratedValue
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
private String password;
@Column(name = "is_active", nullable = false)
private boolean isActive;
@Column(name = "date_created")
private Date dateCreated;
@Column(name = "date_last_modified")
private Date dateLastModified;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean isActive) {
this.isActive = isActive;
}
public Date getDateCreated() {
return dateCreated;
}
public void setDateCreated(Date dateCreated) {
this.dateCreated = dateCreated;
}
public Date getDateLastModified() {
return dateLastModified;
}
public void setDateLastModified(Date dateLastModified) {
this.dateLastModified = dateLastModified;
}
}
Но когда я принести счет, скажем, через REST API, как:
@RequestMapping(
value = "/{id}",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public ServiceResponse<Account> getAll(@PathVariable("id") Long id) {
ServiceResponse<Account> serviceResponse = accountService.getAccountById(id);
return serviceResponse;
}
В объекте ответ я получаю IsActive поле переименованы Hibernate к «активным», как это:
{
"id": 19,
"firstName": "Julia",
"lastName": "Sarandi",
"email": "[email protected]",
"password": "111111",
"dateCreated": 1451293826000,
"dateLastModified": null,
"active": true
}
Почему? Почему все имена других полей остаются такими же, как в классе Account, но isActive переименовывается?
Это один вопрос, а другой вопрос не является: Я новичок в спящем режиме, и я не понимаю, почему в логах Hibernate DB запросов является показывают некоторые странные запросы:
языкаHibernate: select account0_.id as id1_0_0_, account0_.date_created as date_cre2_0_0_, account0_.date_last_modified as date_las3_0_0_, account0_.email as email4_0_0_, account0_.first_name as first_na5_0_0_, account0_.is_active as is_activ6_0_0_, account0_.last_name as last_nam7_0_0_, account0_.password as password8_0_0_ from Account account0_ where account0_.id=?
Что запрос является Это? Что такое символы: «0_», «0_0_». Могу ли я переключать журналы, чтобы показывать запросы MySQL, чтобы сделать их более понятными?
FYI В моих application.properties файл я следующие конфигурации:
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultNamingStrategy
вы цитируете некоторые JSON, но это не связано с Hibernate или JPA. Независимо от того, какую библиотеку JSON вы используете, это отвечает за это. Вы цитируете SQL-код, сгенерированный Hibernate ... и вы обнаружите, что другие поставщики JPA генерируют гораздо более читаемый SQL-код. –
Что вы подразумеваете под «провайдерами JPA генерируют гораздо более читаемый SQL»? Где я могу обратиться к JPA? –
Что я имею в виду? то, что я сказал. Если вы выполняете запрос JPQL (или команду JPA, например find), поставщик JPA преобразует его в SQL (как сообщит вам любая документация JPA). Спящий режим генерирует то, что вы видите там; по моему опыту, другие поставщики JPA генерируют более читаемый SQL, чем Hibernate. Вы можете легко проверить его, используя другой поставщик JPA. –