Я использую MSSQL, Hibernate, wildfly, и мой запрос:
em.createQuery("select a from GeoDivType a where a.description = 'شسasфы' " , GeoDivType.class);
, который выдает следующее:
Hibernate: выберите geodivtype0_.Id as Id1_69_, geodivtype0_.Description asDescript2_69_, geodivtype0_.Name как Name3_69_, geodivtype0_.parent как parent5_69_, geodivtype0_.version как version4_69_ из GeoDivType geodivtype0_, где geodivtype0_.Description = 'شس asва'
в конце без префикса, как вы можете видеть, если вы не можете использовать префикси если вы выполните точный код в sql management studio, вы ничего не получите, но с Description=N'شسasва'
я получу желаемый результат.
Я попытался добавить их в свой Persistence.xml
<property name="hibernate.connection.characterEncoding" value="utf8"/>
<property name="hibernate.connection.useUnicode" value="true"/>
<property name="hibernate.connection.charSet" value="UTF-8"/>
и это на мой URL:
useUnicode=yes;characterEncoding=UTF-8;
по-прежнему ничего.
мои поля nvarchar(255)
, и для нешифрованных символов нет знака вопроса, моя проблема в том, что я не могу выбратьих.
редактировать:
отображение GeoDivType:
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="GeoDivType")
public class GeoDivType implements Serializable {
public GeoDivType() {
}
@Column(name="Id", nullable=false)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne( fetch=FetchType.LAZY)
@JoinColumns({ @JoinColumn(name="parent", referencedColumnName="Id") })
private serp3.entity.actor.GeoDivType parent;
@Column(name="Name", nullable=true, length=255)
private String name;
@Column(name="Description", nullable=true, length=255, columnDefinition = "nvarchar(255)")
private String description;
@OneToMany(mappedBy="parent")
private java.util.List<serp3.entity.actor.GeoDivType> childs = new java.util.ArrayList<serp3.entity.actor.GeoDivType>();
@ManyToMany()
@JoinTable(name="GeoDivType_GeoDivUsage", joinColumns={ @JoinColumn(name="GeoDivTypeId") }, inverseJoinColumns={ @JoinColumn(name="geoDivUsages") })
private java.util.List<serp3.entity.actor.GeoDivUsage> geoDivUsages = new java.util.ArrayList<serp3.entity.actor.GeoDivUsage>();
private void setId(long value) {
setId(new Long(value));
}
private void setId(Long value) {
this.id = value;
}
public Long getId() {
return id;
}
@Version
@Column(name = "version")
private Long version;
public void setVersion(Long version) {
this.version = version;
}
public Long getVersion() {
return version;
}
@Override
public int hashCode() {
int hash = 7;
hash = 67 * hash + java.util.Objects.hashCode(this.id);
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof GeoDivType)) {
return false;
}
final GeoDivType other = (GeoDivType) obj;
if (!java.util.Objects.equals(this.getId(), other.getId())) {
return false;
}
return true;
}
public void setName(String value) {
this.name = value;
}
public String getName() {
return name;
}
public void setDescription(String value) {
this.description = value;
}
public String getDescription() {
return description;
}
public void setChilds(java.util.List<serp3.entity.actor.GeoDivType> value) {
this.childs = value;
}
public java.util.List<serp3.entity.actor.GeoDivType> getChilds() {
return childs;
}
public void setParent(serp3.entity.actor.GeoDivType value) {
this.parent = value;
}
public serp3.entity.actor.GeoDivType getParent() {
return parent;
}
public void setGeoDivUsages(java.util.List<serp3.entity.actor.GeoDivUsage> value) {
this.geoDivUsages = value;
}
public java.util.List<serp3.entity.actor.GeoDivUsage> getGeoDivUsages() {
return geoDivUsages;
}
public String toString() {
return String.valueOf(getId());
}
}
мой диалект:
import org.hibernate.dialect.SQLServer2012Dialect;
import org.hibernate.type.StandardBasicTypes;
import java.sql.Types;
public class MSSQL2012 extends SQLServer2012Dialect{
public MSSQL2012() {
registerColumnType(Types.CHAR, "nchar(1)");
registerColumnType(Types.LONGVARCHAR, "nvarchar(max)" );
registerColumnType(Types.VARCHAR, 4000, "nvarchar($l)");
registerColumnType(Types.VARCHAR, "nvarchar(max)");
registerColumnType(Types.CLOB, "nvarchar(max)" );
registerColumnType(Types.NCHAR, "nchar(1)");
registerColumnType(Types.LONGNVARCHAR, "nvarchar(max)");
registerColumnType(Types.NVARCHAR, 4000, "nvarchar($l)");
registerColumnType(Types.NVARCHAR, "nvarchar(max)");
registerColumnType(Types.NCLOB, "nvarchar(max)");
registerHibernateType(Types.NCHAR, StandardBasicTypes.CHARACTER.getName());
registerHibernateType(Types.LONGNVARCHAR, StandardBasicTypes.TEXT.getName());
registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());
registerHibernateType(Types.NCLOB, StandardBasicTypes.CLOB.getName() );
}
}
в Persistence.xml
<property name="hibernate.dialect" value="serp3.util.dialect.MSSQL2012"/>