当我使用休眠类在MySQL中选择一行时,它会自动进行更新

恩里

我正在尝试为我的用户制定黑名单,其中包括几个变量。因此,当用户注册我的应用程序时,我会检查某些参数是否被列入黑名单。

问题是,当我执行选择并且数据库找到适合我的搜索的内容时,它会自动执行更新以清除该行。

这是MySQL日志:

   86 Query select * from blacklist where mobile_token = 'b'
       86 Query SHOW WARNINGS
       86 Query select @@session.tx_read_only
       86 Query update mydatabase.blacklist set email=null, iban=null, mobile_token=null, nif=null where blacklist_id=1
       86 Query SHOW WARNINGS
       86 Query commit
       86 Query SET autocommit=1
       86 Query SET autocommit=1
       86 Query set session transaction read write

这是我的桌子: 在此处输入图片说明

我的模特:

package models.classes_hibernate;

import javax.persistence.*;

import static javax.persistence.GenerationType.IDENTITY;

@Entity
@Table(name="blacklist"
    ,catalog="mydatabase"
)
public class Blacklist implements java.io.Serializable {

    private Integer blacklistId;
    private String mobileToken;
    private String iban;
    private String nif;
    private String email;

    public Blacklist() {
    }

    @Id @GeneratedValue(strategy=IDENTITY)

    @Column(name="blacklist_id", unique=true, nullable=false)
    public Integer getBlacklistId() {
        return this.blacklistId;
    }
    public void setBlacklistId(Integer blacklistId) {
        this.blacklistId = blacklistId;
    }

    @Column(name="mobile_token", nullable = false)
    public String getMobileToken() {
        return this.mobileToken;
    }
    public void setMobileToken(String name) {
        this.mobileToken = mobileToken;
    }

    @Column(name="iban", nullable = false)
    public String getIban() {
        return this.iban;
    }
    public void setIban(String name) {
        this.iban = iban;
    }

    @Column(name="nif", nullable = false)
    public String getNif() {
        return this.nif;
    }
    public void setNif(String name) {
        this.nif =  nif;
    }

    @Column(name="email", nullable = false)
    public String getEmail() {
        return this.email;
    }
    public void setEmail(String name) {
        this.email =  email;
    }
}

还有我的DAO:

package models.dao;

import com.google.common.collect.Lists;
import models.classes_hibernate.Blacklist;
import models.pages.Page;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.hibernate.type.StringType;
import play.Logger;
import play.db.jpa.JPA;
import play.db.jpa.Transactional;

import javax.persistence.NoResultException;
import javax.persistence.Query;
import java.util.List;

public class BlacklistDAOImpl implements MyAppCRUDDAOInterface<Blacklist> {

    @Override
    public void create(Blacklist entity) {
        JPA.em().persist(entity);
    }

    @Override
    public Blacklist read(Integer id) {
        return JPA.em().find(Blacklist.class, id);
    }

    public Page<Blacklist> readAll(String orientation,int pageSize, int beginElementId)
    {
        Query query = null;
        List<Blacklist> blacklists = null;
        boolean areThereMore = false;
        Page<Blacklist> allBlacklists = null;
        int size = 0;

        if(orientation.equals("all")) {
            query = JPA.em().createNativeQuery("select * from blacklist",Blacklist.class);

        }

        if(orientation.equals("lt")) {
            query = JPA.em().createNativeQuery("select * from blacklist where blacklist_id < ? ORDER BY blacklist_id DESC",Blacklist.class);
            query.setParameter(1, beginElementId);
            size =query.getResultList().size();
            query.setMaxResults(pageSize);
        }

        if(orientation.equals("gt")) {
            query = JPA.em().createNativeQuery("select * from blacklist blacklist_id > ? ORDER BY blacklist_id ASC",Blacklist.class);
            query.setParameter(1, beginElementId);
            size =query.getResultList().size();
            query.setMaxResults(pageSize);

        }

        if (size>pageSize)
            areThereMore = true;

        try {
            blacklists = query.getResultList();

            if (orientation.equals("gt")) {
                List<Blacklist> reverseList = Lists.reverse(blacklists);
                blacklists = reverseList;
            }
            allBlacklists = new Page<Blacklist>(blacklists, areThereMore, "Blacklist");

            return allBlacklists;
        }
        catch(NoResultException nre){
            allBlacklists=null;
            return allBlacklists;
        }
    }

    @Override
    public void update(Blacklist entity) {
        JPA.em().merge(entity);
    }

    @Override
    public void delete(Blacklist entity) {
        JPA.em().remove(entity);
    }

    @Override
    public boolean isManaged(Blacklist entity) {
        return JPA.em().contains(entity);
    }

    @Override
    public void close() {
        JPA.em().close();
    }

    public Boolean isMobileTokenBlacklisted(String mobileToken) {

        Query query = JPA.em().createNativeQuery("select * from blacklist where mobile_token = ?",Blacklist.class);
        query.setParameter(1, mobileToken);

        Blacklist blacklist;
        try {
            Logger.debug("Voy a comprobar");
            blacklist = (Blacklist)query.getSingleResult();
        } catch (NoResultException nre){
            blacklist=null;
        }
        return blacklist != null;
    }

isMobileTokenBlacklisted调用:

@POST
@Path("/api/user")
@ApiOperation(position = 3, nickname ="user", value = "Sign up new user",notes = "Minimum JSON required: ",
        response = AppUserJSON.class, httpMethod = "POST")
@BodyParser.Of(BodyParser.Json.class)
@Transactional
public static Result signup() {

    AppUserDAOImpl appUserDAO = new AppUserDAOImpl();

    AppUserJSON user = null;
    AppUser appUser = null;
    BlacklistDAOImpl blacklistDAO = new BlacklistDAOImpl();
    try {
        user = parse();

        String encrypt_nif = user.nif;
        String encrypt_authorization = user.parental_authorization;
        String encrypt_password = user.password;
        try {
            encrypt_password= EncryptUtils.encrypt(config1.getString("key"),user.password);
            if(user.nif!= null)
                encrypt_nif = EncryptUtils.encrypt(config1.getString("key"),user.nif);
            if(user.parental_authorization!= null)
                encrypt_authorization = EncryptUtils.encrypt(config1.getString("key"),user.parental_authorization);
        } catch (Exception e) {
            e.printStackTrace();
        }
        appUser = new AppUser(new Date(), new Date(),user.email.toLowerCase(), encrypt_password, user.mobile_token,
                user.mobile_device, 0, 0, 0, 0, encrypt_nif,
                false,"NOT_LOCKED", encrypt_authorization, 0, false);

        if (user.email == null) {
            return status (200, "email missing");
        } else if (blacklistDAO.isEmailBlacklisted(user.email)){
            return status(401, "Email is blacklisted");
        }

        if (user.password == null)
            return status(201, "password missing");

        if (user.mobile_token == null) {
            return status (206, "mobileToken missing");
        } else if (blacklistDAO.isMobileTokenBlacklisted(user.mobile_token)){
            Logger.debug("MobileToken blacklisted");
            return status(401, "Mobile token is blacklisted");
        }

        if (user.mobile_device== null)
            return status(207, "mobileDevice missing");

        else{
            appUserDAO.create(appUser);
            user.app_user_id= appUser.getAppUserId();
            return ok(Json.toJson(user));
        }

    } catch (IncompleteJSONException e) {
        return badRequest("IncompleteJSONException");
    } catch (DuplicateJSONException e) {
        return badRequest("DuplicateJSONException");
    }
}

谢谢!

RPresle

我不知道它来自哪里,但我们可以找到一种方法来纠正某些问题以改善您的代码并排除某些查询。

  • 如果使用,请务必使用括号。这不是强制性的,而是使代码更清晰的一种方法
  • 在注册方法中,else不符合逻辑它仅取决于最后一个if(移动设备测试)。如果所有测试都不正确,则可能要创建用户。
  • 在这里,您只想测试是否有与您的研究相对应的黑名单元素。您可以使用COUNT函数甚至EXISTS来提高效率。

您也可以使用“调试”模式查看更新的完成位置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我使用间接选择在dojo的增强型网格中单击一行时如何自动选中复选框

来自分类Dev

当我使用自动刷新时,PHP MySQL仅返回最后一行

来自分类Dev

Excel VBA:当我删除一行时,请更新我的编号列表

来自分类Dev

当我插入一行时,更新另一张表中的一列

来自分类Dev

在表格中选择下一行时,更新电子表格侧栏中的值

来自分类Dev

当我从父级删除一行时,MySQL 5.1没有强制执行FK约束,

来自分类Dev

在同一行中选中选择框时如何自动在复选框中选择

来自分类Dev

当我尝试插入一行时,它给了我错误代码:1452

来自分类Dev

当我在第100行时,如何显示第一行?

来自分类Dev

仅在DataGrid中选择一行时如何启用按钮?

来自分类Dev

当多个用户在Gridview中选择同一行时,出现Java脚本弹出框

来自分类Dev

在角度 ui-grid 中选择一行时仅获取可见列

来自分类Dev

在 p:dataTable 中选择一行时如何查询字段?

来自分类Dev

当我用/开始一行时,sudo emacs因流浪汉而崩溃

来自分类Dev

当我用/开始一行时,sudo emacs因流浪汉而崩溃

来自分类Dev

在DataGridView C#中选择一行时选择一个单元格

来自分类Dev

当我尝试更新我的一个用户个人资料时,它会更新我的

来自分类Dev

使用php从一个表中选择一行时向另一表中添加行

来自分类Dev

mysql innodb table lock-当更新一行时,在另一行上更新

来自分类Dev

当我的HTML h1元素有足够的空间来使用一行时,为什么会跨越两行?

来自分类Dev

在使用网格布局的 Html 中,当我们的图像少于一行时,如何使最后一张图像左对齐

来自分类Dev

为什么当我从数据库中提取内容时,它会自动添加新行?

来自分类Dev

当我打开VLC Media Player时,它会自动创建一个空白副本

来自分类Dev

当我打开VLC Media Player时,它会自动创建一个空白副本

来自分类Dev

当我有动态表格时,能够在“按钮单击”上更新一行

来自分类Dev

从相似行MYSQL中选择一行

来自分类Dev

为什么在更新数据源时会自动选择我的 DataGridView 中的一行?

来自分类Dev

MS Access 语法错误:当我在列表中选择 ID 时,它会给出 ID= 的语法错误

来自分类Dev

当我只编辑一行时,为什么多行(“版本”)保存在 eloquent 中

Related 相关文章

  1. 1

    当我使用间接选择在dojo的增强型网格中单击一行时如何自动选中复选框

  2. 2

    当我使用自动刷新时,PHP MySQL仅返回最后一行

  3. 3

    Excel VBA:当我删除一行时,请更新我的编号列表

  4. 4

    当我插入一行时,更新另一张表中的一列

  5. 5

    在表格中选择下一行时,更新电子表格侧栏中的值

  6. 6

    当我从父级删除一行时,MySQL 5.1没有强制执行FK约束,

  7. 7

    在同一行中选中选择框时如何自动在复选框中选择

  8. 8

    当我尝试插入一行时,它给了我错误代码:1452

  9. 9

    当我在第100行时,如何显示第一行?

  10. 10

    仅在DataGrid中选择一行时如何启用按钮?

  11. 11

    当多个用户在Gridview中选择同一行时,出现Java脚本弹出框

  12. 12

    在角度 ui-grid 中选择一行时仅获取可见列

  13. 13

    在 p:dataTable 中选择一行时如何查询字段?

  14. 14

    当我用/开始一行时,sudo emacs因流浪汉而崩溃

  15. 15

    当我用/开始一行时,sudo emacs因流浪汉而崩溃

  16. 16

    在DataGridView C#中选择一行时选择一个单元格

  17. 17

    当我尝试更新我的一个用户个人资料时,它会更新我的

  18. 18

    使用php从一个表中选择一行时向另一表中添加行

  19. 19

    mysql innodb table lock-当更新一行时,在另一行上更新

  20. 20

    当我的HTML h1元素有足够的空间来使用一行时,为什么会跨越两行?

  21. 21

    在使用网格布局的 Html 中,当我们的图像少于一行时,如何使最后一张图像左对齐

  22. 22

    为什么当我从数据库中提取内容时,它会自动添加新行?

  23. 23

    当我打开VLC Media Player时,它会自动创建一个空白副本

  24. 24

    当我打开VLC Media Player时,它会自动创建一个空白副本

  25. 25

    当我有动态表格时,能够在“按钮单击”上更新一行

  26. 26

    从相似行MYSQL中选择一行

  27. 27

    为什么在更新数据源时会自动选择我的 DataGridView 中的一行?

  28. 28

    MS Access 语法错误:当我在列表中选择 ID 时,它会给出 ID= 的语法错误

  29. 29

    当我只编辑一行时,为什么多行(“版本”)保存在 eloquent 中

热门标签

归档