我没有使用 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
?那些。无论我在哪里创建这样的课程,它都适合放在桌子上吗?
简而言之,加法发生在这里
这是该方法的说明。
标记为实体的对象是数据对象,并作为状态写入数据库表。此类对象仅存储数据,不能将自身存储在数据库中。
为了更好地理解 Hibernate 及其方法,您可以阅读 Christian Bauer、Gavin King、Gary Gregory 编写的 Java Persistence API 和 Hibernate一书