java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: 用户未映射

问题描述

我知道这已经被问过很多次了,但到目前为止没有一个答案解决了这个问题。

我的代码多年来一直运行良好,直到我从 Hibernate 4.3.11 升级Hibernate 5.2.0。现在我收到以下错误

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [select password,salt from User where userName=:fullName and distributor_id is null]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:131)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162)
at org.hibernate.internal.AbstractSharedSessionContract.createquery(AbstractSharedSessionContract.java:633)
at org.hibernate.internal.AbstractSharedSessionContract.createquery(AbstractSharedSessionContract.java:101)
at com.stuhrling.service.authentication.AuthenticationService.authenticate(AuthenticationService.java:103)
at com.stuhrling.service.authentication.AuthenticationService.processLogin(AuthenticationService.java:42)
at com.stuhrling.interceptor.AuthenticationInterceptor.intercept(AuthenticationInterceptor.java:60)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245)
at com.stuhrling.interceptor.OpenSessionInViewInterceptor.intercept(OpenSessionInViewInterceptor.java:189)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245)
at com.stuhrling.interceptor.SessionMessageInterceptor.intercept(SessionMessageInterceptor.java:55)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.dispatcher.serviceAction(dispatcher.java:575)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2476)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2465)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [select password,salt from User where userName=:fullName and distributor_id is null]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
    at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:152)
    at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:523)
    at org.hibernate.internal.AbstractSharedSessionContract.createquery(AbstractSharedSessionContract.java:625)
    ... 31 more
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClasspersister(SessionFactoryHelper.java:171)
    at org.hibernate.hql.internal.ast.tree.fromElementFactory.addfromElement(fromElementFactory.java:91)
    at org.hibernate.hql.internal.ast.tree.FromClause.addfromElement(FromClause.java:79)
    at org.hibernate.hql.internal.ast.HqlsqlWalker.createfromElement(HqlsqlWalker.java:321)
    at org.hibernate.hql.internal.antlr.HqlsqlbaseWalker.fromElement(HqlsqlbaseWalker.java:3704)
    at org.hibernate.hql.internal.antlr.HqlsqlbaseWalker.fromElementList(HqlsqlbaseWalker.java:3593)
    at org.hibernate.hql.internal.antlr.HqlsqlbaseWalker.fromClause(HqlsqlbaseWalker.java:718)
    at org.hibernate.hql.internal.antlr.HqlsqlbaseWalker.query(HqlsqlbaseWalker.java:574)
    at org.hibernate.hql.internal.antlr.HqlsqlbaseWalker.selectStatement(HqlsqlbaseWalker.java:311)
    at org.hibernate.hql.internal.antlr.HqlsqlbaseWalker.statement(HqlsqlbaseWalker.java:259)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190)
    ... 37 more

大多数答案是应该查询实体,而不是表,我确实这样做了。

User 类的代码

package com.stuhrling.domain.user;

import com.stuhrling.domain.customerservice.ProcessingLocation;
import com.stuhrling.domain.distributor.distributor;
import com.stuhrling.domain.favorites.FavoritesItem;
import com.stuhrling.domain.offer.Customer;
import com.stuhrling.domain.offer.Offer;
import com.stuhrling.domain.permissions.Group;
import com.stuhrling.domain.permissions.Permission;
import com.stuhrling.domain.permissions.PermissionList;
import com.stuhrling.domain.permissions.PermissionsSchema;
import com.stuhrling.domain.shoppingcart.ShoppingCartItem;
import com.stuhrling.persistence.HibernateUtil;
import com.stuhrling.persistence.PersistenceException;
import com.stuhrling.util.EqualsUtil;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.MapKey;
import javax.persistence.MapKeyColumn;
import javax.persistence.OnetoMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;

import org.apache.log4j.Logger;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.IndexColumn;
import org.jdom2.JDOMException;

@Entity
@Table(name = "USER",uniqueConstraints = {
    @UniqueConstraint(columnNames = {"user_name"})})
public class User {

    private static final int MAX_MRU_SIZE = 10;
    private static final Logger log = Logger.getLogger(User.class);

    public final static String ADMIN = "ADMIN";
    public final static String GENERAL = "GENERAL";
    public final static String disTRIBUTOR = "disTRIBUTOR";
    public final static String MANUFACTURING = "MANUFACTURING";
    public final static String PRODUCT_DEVELOPMENT = PRODUCT_DEVELOPMENT";
    public final static String PHOTOGRAPHY = "PHOTOGRAPHY";
    public static final String ACCOUNT_MANAGER = "ACCOUNT_MANAGER";
    public static final String ADMINISTRATOR = "ADMINISTRATOR";
    public static final String CUSTOMER_SERVICE = "CUSTOMER_SERVICE";
    public static final String GENERAL_ACCESS = "GENERAL_ACCESS";
    public static final String PRODUCT_AUTHOR = "PRODUCT_AUTHOR";
    public static final String SHIPPING_RECEIVING = "SHIPPING_RECEIVING";
    public static final String supplier = "supplier";

    @Column(name = "calendar_email_subscribe")
    private Boolean calendarEmailSubscribe;
    
    @Column(name = "must_reset_password")
    private Boolean mustResetPassword;

    @Transient
    private String xmlFile = "permissions.xml";

    @SuppressWarnings("unused")
    @Column(name = "salt")
    private String salt;

    @Column(name = "permission_snapshot")
    private boolean permissionCompanySnapshot = false;

    @Column(name = "permission_distributor_file_upload")
    private boolean permissiondistributorFileUpload = false;
    
    public boolean isPermissiondistributorFileUpload() {
        return permissiondistributorFileUpload;
    }

    public void setPermissiondistributorFileUlpoad(boolean permissiondistributorFileUlpoad) {
        this.permissiondistributorFileUpload = permissiondistributorFileUlpoad;
    }

    @Column(name = "full_name")
    private String fullName;

    @Column(name = "session_brand_mode")
    private String sessionBrandMode;

    @Column(name = "is_admin")
    private boolean admin = false;

    @Column(name = "exec_admin")
    private boolean execAdmin = false;
    
    @Column(name = "snap_shot_preferance",nullable = false,columnDeFinition = "varchar(255) default 'false|5|0|1|0|0|5|0|1'")
    private String snapShotPreferance = "false|5|0|1|0|0|5|0|1"; /

    @OnetoMany
    @MapKeyColumn(name = "brand")
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
    Map<String,PermissionList> brAndPermissions = new HashMap<String,PermissionList>();
    
    @Column(name = "password")
    private String password;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(name = "user_name")
    private String userName;

    @Column
    private boolean archived = false;
    
    @ManyToOne
    @JoinColumn(name = "distributor_id",nullable = true)
    private distributor distributor;

    @Column(name = "user_type")
    private String userType;
    
    @Column(name = "email")
    private String email;

    @OnetoMany(mappedBy = "user",cascade = CascadeType.ALL)
    @OrderBy("brand asc")
    List<ShoppingCartItem> cart = new ArrayList<ShoppingCartItem>();

    @OnetoMany(mappedBy = "user",cascade = CascadeType.ALL)
    List<FavoritesItem> favorites = new ArrayList<FavoritesItem>();
    
    @OnetoMany
    @MapKey(name = "id")
    @JoinTable(name = "USER_OFFERS",joinColumns = {
        @JoinColumn(name = "user_id")},inverseJoinColumns = {
        @JoinColumn(name = "offer_id")})
    Map<Integer,Offer> userLists = new HashMap<Integer,Offer>();

    @OnetoMany
    @IndexColumn(name = "idx")
    @JoinTable(name = "USER_MRU_OFFERS",inverseJoinColumns = {
        @JoinColumn(name = "offer_id")})
    List<Offer> mostRecentlyUsedLists = new LinkedList<Offer>();

    @ManyToMany(mappedBy = "accountManagers")
    private Set<Customer> accounts = new TreeSet<Customer>();

    @Column(name = "vendor")
    private String vendor;

    @Column(name = "brand")
    private String brand;
    
    @Column(name = "permission_edit")
    private boolean permissionToEdit;

    @Column(name = "role")
    private String role;

    @Column(name = "last_login")
    private Date lastLogin;
    
    public String getXmlFile() {
        return xmlFile;
    }

    public void setXmlFile(String xmlFile) {
        this.xmlFile = xmlFile;
    }

    public boolean isPermissionCompanySnapshot() {
        return permissionCompanySnapshot;
    }

    public void setPermissionCompanySnapshot(boolean permissionCompanySnapshot) {
        this.permissionCompanySnapshot = permissionCompanySnapshot;
    }

    public String getSnapShotPreferance() {
        return snapShotPreferance;
    }

    public void setSnapShotPreferance(String snapShotPreferance) {
        this.snapShotPreferance = snapShotPreferance;
    }

    public boolean isExecAdmin() {
        return execAdmin;
    }

    public void setExecAdmin(boolean execAdmin) {
        this.execAdmin = execAdmin;
    }

    public boolean isAdmin() {
        return admin;
    }

    public void setAdmin(boolean admin) {
        this.admin = admin;
    }

    public String getSessionBrandMode() {
        return sessionBrandMode;
    }

    public void setSessionBrandMode(String sessionBrandMode) {
        this.sessionBrandMode = sessionBrandMode;
    }

    public boolean isArchived() {
        return archived;
    }

    public void archiveUser() {
        this.archived = true;
    }

    public void unarchiveUser() {
        this.archived = false;
    }

    public String getUserType() {
        return userType;
    }

    public void setUserType(String userType) {
        this.userType = userType;
    }

    public List<FavoritesItem> getFavorites() {
        return favorites;
    }

    public void setFavorites(List<FavoritesItem> favorites) {
        this.favorites = favorites;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
        verifyAndResetBrandMode();
    }

    public List<Offer> getUserLists() {
        List<Offer> list = new ArrayList<Offer>();
        list.addAll(userLists.values());
        return list;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getId() {
        return id;
    }
    
    public String getFullName() {
        return fullName;
    }

    public String getpassword() {
        return password;
    }

    public int getUserId() {
        return id;
    }

    public String getUserName() {
        return userName;
    }
  
    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setUserId(int userId) {
        this.id = userId;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public Offer getUserList(int id) {
        Offer list = userLists.get(id);
        addToMostRecentlyUsedLists(list);
        return list;
    }

    public Map<Integer,Offer> getAllUserLists() {
        return userLists;
    }
    
    public void removeList(Offer offer) {
        userLists.remove(offer.getId());
    }

    public void addToMostRecentlyUsedLists(Offer list) {
        if (list == null) {
            return;
        }

        mostRecentlyUsedLists.remove(list);
        mostRecentlyUsedLists.add(0,list);

        while (mostRecentlyUsedLists.size() > MAX_MRU_SIZE) {
            mostRecentlyUsedLists.remove(mostRecentlyUsedLists.size() - 1);
        }
    }

    public List<Offer> getRecentlyUsedLists() {
        return mostRecentlyUsedLists;
    }

    public boolean getPermissionToEdit() {
        return permissionToEdit;
    }

    public void setPermissionToEdit(boolean permissionToEdit) {
        this.permissionToEdit = permissionToEdit;
    }

    public String getRole() {
        return role;
    }

    public boolean isRole(String r) {
        return role != null && role.contains(r);
    }

    public void setRole(String role) {
        this.role = role;
    }

    public void setLastLogin(Date date) {
        this.lastLogin = date;
    }

    public Date getLastLogin() {
        return lastLogin;
    }

    public String getvendor() {
        return vendor;
    }

    public void setvendor(String vendor) {
        this.vendor = vendor;
    }

    public boolean isRestrictedvendor() {
        return (this.vendor != null && !this.vendor.equals(""));
    }

    public Set<Customer> getAccounts() {
        return accounts;
    }

    public void setAccounts(Set<Customer> accounts) {
        this.accounts = accounts;
    }

    @Override
    public String toString() {
        return this.fullName;
    }

    public Boolean getCalendarEmailSubscribe() {
        return calendarEmailSubscribe;
    }

    public void setCalendarEmailSubscribe(Boolean calendarEmailSubscribe) {
        this.calendarEmailSubscribe = calendarEmailSubscribe;
    }

    public distributor getdistributor() {
        return distributor;
    }

    public void setdistributor(distributor distributor) {
        this.distributor = distributor;
    }

    public boolean isdistributor() {
        return this.distributor != null;
    }

    public boolean isPermissioned(String brand,String permission) {
        boolean hasPermission = false;

        if (brAndPermissions.containsKey(brand)) {
            PermissionList permissionList = brAndPermissions.get(brand);
            hasPermission = permissionList.hasPermission(permission);
        }

        return hasPermission;
    }

    @Transient
    private boolean isGroupPermissioned = false;

    public boolean isGroupPermissioned(String brand,String group) throws JDOMException,IOException {
        loopThroughGroups(brand,group);

        return isGroupPermissioned;
    }

    private void loopThroughGroups(String brand,IOException {
        PermissionsSchema permissions = PermissionsSchema.getInstance("permissions.xml");
        List<Group> groups = permissions.getGroups();

        for (Group groupObj : groups) {
            if (groupObj.getName().equals(group)) {
                isGroupPermissioned = true;
                loopThroughPermissions(brand,group,groupObj);
            }
        }
    }

    private void loopThroughPermissions(String brand,String group,Group groupObj) {
        for (Permission permission : groupObj.getPermissions()) {
            if (!(isPermissioned(brand,permission.getName()))) {
                isGroupPermissioned = false;
                break;
            }
        }
    }

    public List<ShoppingCartItem> getCart() {
        return cart;
    }

    public void setCart(List<ShoppingCartItem> cart) {
        this.cart = cart;
    }

    public void addPermission(String brand,String permission) {
        if (brAndPermissions.containsKey(brand)) {
            addPermissionToExistingValue(brand,permission);
        } else {
            addNewKeyAndValue(brand,permission);
        }
    }

    private void addPermissionToExistingValue(String brand,String permission) {
        PermissionList permissionList = brAndPermissions.get(brand);
        permissionList.addPermission(permission);
    }

    private void addNewKeyAndValue(String brand,String permission) {
        PermissionList permissionList = new PermissionList();
        permissionList.addPermission(permission);
        brAndPermissions.put(brand,permissionList);
    }

    public void removePermission(String brand,String permission) {
        if (brAndPermissions.containsKey(brand)) {
            PermissionList permissionList = brAndPermissions.get(brand);
            permissionList.removePermission(permission);
        }
    }

    public List<String> getPermissions(String brand) {
        List<String> permissionArrayList = null;

        if (brAndPermissions.get(brand) != null) {
            PermissionList permissionList = brAndPermissions.get(brand);
            permissionArrayList = permissionList.getPermissions();
        }

        return permissionArrayList;
    }

    public boolean isActionPermissioned(String brand,String action) throws IOException,JDOMException {
        boolean isActionPermissioned = false;

        PermissionsSchema schema = PermissionsSchema.getInstance("permissions.xml");
        List<Permission> permissions = schema.getPermissionsHavingAction(action);

        for (Permission permission : permissions) {
            if (isPermissioned(brand,permission.getName())) {
                isActionPermissioned = true;
                break;
            }
        }

        return isActionPermissioned;
    }

    public boolean hasPermissionInGroup(String brand,IOException {
        boolean hasPermissionInGroup = false;

        PermissionsSchema permissions = PermissionsSchema.getInstance(xmlFile);
        List<Group> groups = permissions.getGroups();

        for (Group groupObj : groups) {
            if (groupObj.getName().equals(group)) {
                List<Permission> permissionObjects = groupObj.getPermissions();

                for (Permission element : permissionObjects) {
                    if (isPermissioned(brand,element.getName())) {
                        hasPermissionInGroup = true;
                        break;
                    }
                }

                break;
            }
        }

        return hasPermissionInGroup;
    }

    public boolean isPermissionedForBrand(String brandtocheck) {
        if (brand == null) {
            return false;
        }

        return brand.contains(brandtocheck);
    }

    public void verifyAndResetBrandMode() {
        if (sessionBrandMode == null || !isPermissionedForBrand(sessionBrandMode)) {
            if (brand != null && !brand.isEmpty()) {
                sessionBrandMode = brand.substring(0,1);
            }
        }
    }
  
    public void setMustResetPassword(boolean mustResetPassword) {
        this.mustResetPassword = mustResetPassword;
    }

    public Map<String,PermissionList> getBrAndPermissions() {
        return brAndPermissions;
    }

    public void setBrAndPermissions(Map<String,PermissionList> brAndPermissions) {
        this.brAndPermissions = brAndPermissions;
    }
    
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "USER_PROCESSING_LOCATION",joinColumns = { @JoinColumn(name = "user_id") },inverseJoinColumns = { @JoinColumn(name = "processing_location_id") })
    private final List<ProcessingLocation> processingLocations = new ArrayList<ProcessingLocation>();
    
    public List<ProcessingLocation> getProcessingLocations() {
        return processingLocations;
    }
    
    public void addProcessingLocation(ProcessingLocation processingLocation) {
        processingLocations.add(processingLocation);
    }

    public static void main(String[] args) throws PersistenceException {
        HibernateUtil.getCurrentSession();
    }
    
}

用户的实体映射,为简洁起见省略其他实体:

<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.MysqL.cj.jdbc.Driver</property>
        <property name="hibernate.connection.useUnicode">true</property>
        <property name="hibernate.connection.characterEncoding">UTF-8</property>


        <!-- Connection Pool Setting -->
        <property name="hibernate.c3p0.min_size">0</property>
        <property name="hibernate.c3p0.max_size">30</property>
        <property name="hibernate.c3p0.timeout">300</property>
        <property name="hibernate.c3p0.max_statements">50</property>
        <property name="hibernate.c3p0.idle_test_period">90</property>

        <property name="hibernate.c3p0.unreturnedConnectionTimeout">2700</property>
        <property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces">true</property>


        <property name="hibernate.c3p0.testConnectionOnCheckout">true</property>
        <property name="hibernate.c3p0.preferredTestQuery">SELECT 1</property>

        <!-- sql dialect -->
        <property name="dialect">org.hibernate.dialect.MysqL5Dialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- disable the second-level cache -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

        <!-- Echo all executed sql to stdout -->
        <property name="show_sql">false</property>

        <!-- Drop and re-create the database schema on startup -->
<!--        <property name="hbm2ddl.auto">none</property>-->
        
        <mapping class="com.stuhrling.domain.user.User"/>
   </session-factory>
</hibernate-configuration>

查询代码如下:

private List<Object[]> getUserRecords(login){

    Session session = HibernateUtil.getCurrentSession();
    Query hql = session.createquery("select password,salt from User where userName=:fullName");
    hql.setString("fullName",login);
    List<Object[]> results = hql.list();

    if (results.size() > 1) {
            throw new ServiceException("Database inconsistent two users with the same user name");
    }

    return results;
}

有人有什么想法吗?我很绝望,我的工作几乎停滞了......

任何帮助将不胜感激!

更新: 在这里,我按照要求发布了 HibernateUtil 类:

package com.stuhrling.persistence;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;


import com.stuhrling.config.AppConfig;

public class HibernateUtil {
    static Logger log = Logger.getLogger(HibernateUtil.class);

    private static SessionFactory sessionFactory;
    private static final ThreadLocal<Session> threadSession = new ThreadLocal<>();

    static {
        try {
            Class.forName("com.MysqL.cj.jdbc.Driver");

            final Configuration configuration = new Configuration();
            configuration.configure();

            AppConfig appConfig = AppConfig.getInstance();
            configuration.setProperty("hibernate.connection.url",appConfig.getProperty("db.url"));
            configuration.setProperty("hibernate.connection.username",appConfig.getProperty("db.username"));
            configuration.setProperty("hibernate.connection.password",appConfig.getProperty("db.password"));

            final StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                    .configure()
                    .build();

configuration.buildSessionFactory(serviceRegistry);
            sessionFactory = new         MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
        } catch (Throwable e) {
            log.error("Unable to setup DB Connection",e);
        }
    }

    public static void closeSession() {
        try {
            final Session s = threadSession.get();
            if ((s != null) && s.isopen()) {
                s.close();
            }
        } catch (final HibernateException ex) {
            log.error("Unable to close current session",ex);
        } finally {
            threadSession.set(null);
        }
    }

    public static Session getCurrentSession() throws PersistenceException {
        Session s = threadSession.get();
        try {
            if (s == null) {
                s = sessionFactory.openSession();
                threadSession.set(s);
            }
        }
       catch (final HibernateException ex) {
            throw new PersistenceException("Unable to get current session",ex);
        }

        return s;
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void commitTransaction() {
        threadSession.get().getTransaction().commit();
        threadSession.get().beginTransaction();
    }
}

解决方法

由于某种原因,您注册的实体未被选中。也许您正在使用使用不同配置文件的 Session/SessionFactory?

,

'User' 是 mysql 中的一个保留字,也许这就是原因?

,

实体 您可以在代码中更改两件事

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

所有生成的 ID 更改为:

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private int id;

HibernateUtil 应用以下更改

Metadata metadata = new MetadataSources(serviceRegistry).getMetadataBuilder().build();
return metadata.getSessionFactoryBuilder().build();
,

hibernate 5 版本改变了命名策略。所以我认为查询中的 'User' 不再匹配数据库中的 'User' 类和 'USER' 表。

我建议您更改查询以使用数据库中的实际表名。

根据@Table注解,查询应如下所示:

"select password,salt from USER where userName=:fullName"

如果 'USER' 是实际的表名。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...