Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate和String主键,大小写感知加载_Java_Hibernate - Fatal编程技术网

Java Hibernate和String主键,大小写感知加载

Java Hibernate和String主键,大小写感知加载,java,hibernate,Java,Hibernate,我的数据库中有一个tlogin表,它有一个String类型的主键,名为Login。此密钥不是由Hibernate自动生成的,因为它是由应用程序分配的。这里是映射: <id name="_Login" column="Login" unsaved-value="null"> <generator class="assigned" /> </id> 例如,这里甚至用户名也存储为example@hotmail.com在数据库中,如果最终用户使用EXAMPL

我的数据库中有一个tlogin表,它有一个
String
类型的主键,名为Login。此密钥不是由Hibernate自动生成的,因为它是由应用程序分配的。这里是映射:

<id name="_Login" column="Login" unsaved-value="null">
    <generator class="assigned" />
</id>
例如,这里甚至用户名也存储为example@hotmail.com在数据库中,如果最终用户使用EXAMPLE@hotmail.com,它将从数据库中检索对象,但使用EXAMPLE@hotmail.com按键。我想允许用户访问该应用程序,但我想获取存储在数据库中的用户名

我必须为此实现一个标准吗?

我个人会选择(作为命名查询)

但是还有其他的方法

我个人会选择(作为命名查询)

但是还有其他的方法


我最终实现了使用Hibernate标准来解决它。除了
MatchMode.Exact
之外,我还使用了
ilike
限制,这是一种不敏感的like类型,只允许过滤精确匹配

这就是它的工作原理:

public CLogin loadLogin(String userName) throws AccessException {
        try {
            Session sesion = this._dao.init();
            CLogin login = (CLogin) sesion.createCriteria(CLogin.class).add(
                    Restrictions.ilike("_Login", userName.toLowerCase(), MatchMode.EXACT))
                    .uniqueResult();
            if (login == null) {
                throw new AccessException("User does not exist");
            }
            return login;
        } catch (HibernateException e) {
            throw new AccessException(e.getMessage(), e);
        }
    }

我最终实现了使用Hibernate标准来解决它。除了
MatchMode.Exact
之外,我还使用了
ilike
限制,这是一种不敏感的like类型,只允许过滤精确匹配

这就是它的工作原理:

public CLogin loadLogin(String userName) throws AccessException {
        try {
            Session sesion = this._dao.init();
            CLogin login = (CLogin) sesion.createCriteria(CLogin.class).add(
                    Restrictions.ilike("_Login", userName.toLowerCase(), MatchMode.EXACT))
                    .uniqueResult();
            if (login == null) {
                throw new AccessException("User does not exist");
            }
            return login;
        } catch (HibernateException e) {
            throw new AccessException(e.getMessage(), e);
        }
    }

如果我必须这样做,我会尝试按照SQL的顺序作为HQL查询。对不起,我无法判断您是否使用JPA,但如果是这样,我发现NamedQueries或PreparedStatements非常干净,当然可以避免SQL注入。是的,关于Hibernate本身的问题,我当然使用JPA访问。看看我最终的解决方案。无论如何,谢谢。如果我必须这样做,我会尝试按照SQL的顺序作为HQL查询。很抱歉,我无法判断您是否在使用JPA,但如果是这样,我发现NamedQuery或PreparedStatements非常干净,当然也避免了SQL注入。是的,关于Hibernate本身的问题,我当然使用JPA访问。看看我最终的解决方案。不管怎样,谢谢。我也将进入这一步。我使用namedQuery修复了它,但我不想编写自定义方法来获取用户信息或criteriaQuery。我想知道为什么默认的find()或get()方法在这种情况下不起作用。你能帮我个忙吗?我也要开始这一步了。我使用namedQuery修复了它,但我不想编写自定义方法来获取用户信息或criteriaQuery。我想知道为什么默认的find()或get()方法在这种情况下不起作用。你能帮我吗?
public CLogin loadLogin(String userName) throws AccessException {
        try {
            Session sesion = this._dao.init();
            CLogin login = (CLogin) sesion.createCriteria(CLogin.class).add(
                    Restrictions.ilike("_Login", userName.toLowerCase(), MatchMode.EXACT))
                    .uniqueResult();
            if (login == null) {
                throw new AccessException("User does not exist");
            }
            return login;
        } catch (HibernateException e) {
            throw new AccessException(e.getMessage(), e);
        }
    }