我在创建类时遇到了一个问题。Spring Hibernate在查询中添加_
Vehiculo(运载工具)
import java.io.Serializable;
import javax.persistence.*;
import java.util.List;
/**
* The persistent class for the vehiculo database table.
*
*/
@Entity
@Table(name="vehiculo")
@NamedQuery(name="Vehiculo.findAll", query="SELECT v FROM Vehiculo v")
public class Vehiculo implements Serializable {
private static final long serialVersionUID = 1L;
private int idvehiculo;
private int capacidad;
private String matricula;
private int vacante;
private List<PersonaFisica> personaFisicas;
private TipoVehiculo tipoVehiculo;
public Vehiculo() {
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false, name= "idvehiculo")
public int getIdvehiculo() {
return this.idvehiculo;
}
public void setIdvehiculo(int idvehiculo) {
this.idvehiculo = idvehiculo;
}
@Column(nullable=false)
public int getCapacidad() {
return this.capacidad;
}
public void setCapacidad(int capacidad) {
this.capacidad = capacidad;
}
@Column(length=12)
public String getMatricula() {
return this.matricula;
}
public void setMatricula(String matricula) {
this.matricula = matricula;
}
@Column(nullable=false)
public int getVacante() {
return this.vacante;
}
public void setVacante(int vacante) {
this.vacante = vacante;
}
//bi-directional many-to-one association to PersonaFisica
@OneToMany(mappedBy="vehiculo")
public List<PersonaFisica> getPersonaFisicas() {
return this.personaFisicas;
}
public void setPersonaFisicas(List<PersonaFisica> personaFisicas) {
this.personaFisicas = personaFisicas;
}
public PersonaFisica addPersonaFisica(PersonaFisica personaFisica) {
getPersonaFisicas().add(personaFisica);
personaFisica.setVehiculo(this);
return personaFisica;
}
public PersonaFisica removePersonaFisica(PersonaFisica personaFisica) {
getPersonaFisicas().remove(personaFisica);
personaFisica.setVehiculo(null);
return personaFisica;
}
//bi-directional many-to-one association to TipoVehiculo
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="tipo_vehiculo_idTipoVehiculo", nullable=false, referencedColumnName="idTipoVehiculo")
public TipoVehiculo getTipoVehiculo() {
return this.tipoVehiculo;
}
public void setTipoVehiculo(TipoVehiculo tipoVehiculo) {
this.tipoVehiculo = tipoVehiculo;
}
}
VehicleType
import java.io.Serializable;
import javax.persistence.*;
import java.util.List;
/**
* The persistent class for the tipo_vehiculo database table.
*
*/
@Entity
@Table(name="tipo_vehiculo")
@NamedQuery(name="TipoVehiculo.findAll", query="SELECT t FROM TipoVehiculo t")
public class TipoVehiculo implements Serializable {
private static final long serialVersionUID = 1L;
private int idTipoVehiculo;
private String codigo;
private String descripcion;
private List<Vehiculo> vehiculos;
public TipoVehiculo() {
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false,name="idTipoVehiculo")
public int getIdTipoVehiculo() {
return this.idTipoVehiculo;
}
public void setIdTipoVehiculo(int idTipoVehiculo) {
this.idTipoVehiculo = idTipoVehiculo;
}
@Column(nullable=false, length=20)
public String getCodigo() {
return this.codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
@Column(length=140)
public String getDescripcion() {
return this.descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
//bi-directional many-to-one association to Vehiculo
@OneToMany(mappedBy="tipoVehiculo")
public List<Vehiculo> getVehiculos() {
return this.vehiculos;
}
public void setVehiculos(List<Vehiculo> vehiculos) {
this.vehiculos = vehiculos;
}
public Vehiculo addVehiculo(Vehiculo vehiculo) {
getVehiculos().add(vehiculo);
vehiculo.setTipoVehiculo(this);
return vehiculo;
}
public Vehiculo removeVehiculo(Vehiculo vehiculo) {
getVehiculos().remove(vehiculo);
vehiculo.setTipoVehiculo(null);
return vehiculo;
}
}
的问题是,当Hibernate试图做的查询,它的作用:
select vehiculo0_.idvehiculo as idvehicu1_25_, vehiculo0_.capacidad as capacida2_25_,
vehiculo0_.matricula as matricul3_25_, vehiculo0_.tipo_vehiculo_id_tipo_vehiculo as tipo_veh5_25_,
vehiculo0_.vacante as vacante4_25_
from vehiculo vehiculo0_
,你可以看到,该属性被称为:tipo_vehiculo_idTipoVehiculo,但在查询中它不断添加“_”,看起来像这样:tipo_v ehiculo_id_tipo_vehiculo ....
展望互联网我已经看到了,我可以用一个新的NamingStrategy避免出现这种情况,我已经找到了类是这样的:
package net.petrikainulainen.hibernate.util;
import org.hibernate.cfg.ImprovedNamingStrategy;
/**
* A custom naming strategy implementation which uses following naming conventions:
* <ul>
* <li>Table names are lower case and in plural form. Words are separated with '_' character.</li>
* <li>Column names are lower case and words are separated with '_' character.</li>
* </ul>
* @author Petri Kainulainen
*/
public class CustomNamingStrategy extends ImprovedNamingStrategy {
private static final String PLURAL_SUFFIX = "s";
/**
* Transforms class names to table names by using the described naming conventions.
* @param className
* @return The constructed table name.
*/
@Override
public String classToTableName(String className) {
String tableNameInSingularForm = super.classToTableName(className);
return transformToPluralForm(tableNameInSingularForm);
}
private String transformToPluralForm(String tableNameInSingularForm) {
StringBuilder pluralForm = new StringBuilder();
pluralForm.append(tableNameInSingularForm);
pluralForm.append(PLURAL_SUFFIX);
return pluralForm.toString();
}
}
但我没有看到任何地方的“ _“..我也尝试添加下一个代码,看它是否有效,但没有。
@Override
public String propertyToColumnName(String propertyName) {
// TODO Auto-generated method stub
return propertyName;
}
@Override
public String columnName(String columnName) {
// TODO Auto-generated method stub
return columnName;
}
我使用Hibernate + JPA,春有application.yml看起来像这样:和所有可能的类型org.hibernate.dialect的,但没有结果
spring:
datasource:
url: jdbc:mysql://localhost:3306/gotowork_db?useSSL=false
username: root
password: root
jpa:
show-sql: true
hibernate:
naming:
strategy: es.gfi.CustomNamingStrategy
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
是否有避免camelCap更改为“_”的方法???并且不必更改数据库列名称?
感谢
尝试实施propertyToColumnName还有,你只覆盖类表方法 – tonakai