RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1067691
Accepted
Dmitrii
Dmitrii
Asked:2020-01-09 19:02:20 +0000 UTC2020-01-09 19:02:20 +0000 UTC 2020-01-09 19:02:20 +0000 UTC

Hibernate 何时添加到数据库?

  • 772

我没有使用 Hibernate,但现在我正在分析别人的代码,没有时间进行“全面”研究。

原来程序中发出了一个 REST 请求,在处理过程中创建了一个对象,该对象的类被标记为@Entity. 没有像“放入基地”这样的命令。我们退出请求处理程序,过了一会儿,所需的条目突然出现在表中。

@Path("/getAutoInfo")
@ApplicationScoped
@Singleton
public class getAutoInfo {

    public static Logger log = Logger.getLogger(getEventInfo.class.getName());

    @PersistenceContext(name = "test")
    private EntityManager em;

    @POST
    @Produces("text/plain")
    @Consumes(MediaType.APPLICATION_JSON)
    @Transactional
    public Response takeAutoInfo(@Context HttpServletRequest requestContext, String info) {
        String head = "";
        ObjectMapper mapper = new ObjectMapper();
        log.info("Receive data: " + info);
        try{
            Enumeration<String> headerNames = requestContext.getHeaderNames();
            while (headerNames.hasMoreElements()) {
                head += requestContext.getHeader(headerNames.nextElement()) + "\n";
            }
            UserLog userLog = new UserLog(head, info, this.getClass().getSimpleName(), true);
            AutoInfo res = new AutoInfo();
            res = mapper.readValue(info, AutoInfo.class);
            em.merge(res);
            em.persist(userLog);
            log.info("Persist data: " + info);
            log.info("Log info: " + mapper.writeValueAsString(userLog));
            try {
                Query getData;
                CompanyToUnitBase companyToUnitBase;
                getData = em.createQuery("select companyToUnitBase from CompanyToUnitBase companyToUnitBase where companyToUnitBase.autoInfo.id = :autoid");
                getData.setParameter("autoid", res.getId());
                companyToUnitBase = (CompanyToUnitBase) getData.getSingleResult();
                companyToUnitBase.setAutoInfo(res);
                ChangesHistory history = new ChangesHistory(Objects.toString(companyToUnitBase.getAutoInfo().getId()), companyToUnitBase.getClass().getSimpleName(), mapper.writeValueAsString(companyToUnitBase));
                em.persist(history);
            } catch (NoResultException ex) {
                return Response.status(200).entity(info).build();
            }
        }
        catch (Exception ex) {
            return Response.status(415).entity(ex.getMessage()).build();
        }
        return Response.status(200).entity(info).build();
    }
}

诸如此类的问题:何时向表中添加对象?这在使用注释创建任何类对象时会自动发生@Entity?那些。无论我在哪里创建这样的课程,它都适合放在桌子上吗?

java
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Jackson750
    2020-01-09T19:14:24Z2020-01-09T19:14:24Z

    诸如此类的问题:何时向表中添加对象?

    em.persist(userLog);
    
    
    em.persist(history);
    
    • 1
  2. Roman C
    2020-01-09T19:45:57Z2020-01-09T19:45:57Z

    简而言之,加法发生在这里

    em.merge(res);
    

    这是该方法的说明。

    将给定对象的状态复制到具有相同 ID 的已保存对象。如果当前没有与会话关联的已保存实例,它将被加载。返回保存的实例。如果给定实例未保存,则保存副本并将其作为新保存的实例返回。此实例不会与会话关联。

     public Object merge(Object object);
    

    标记为实体的对象是数据对象,并作为状态写入数据库表。此类对象仅存储数据,不能将自身存储在数据库中。


    为了更好地理解 Hibernate 及其方法,您可以阅读 Christian Bauer、Gavin King、Gary Gregory 编写的 Java Persistence API 和 Hibernate一书

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5