标签: entitymanager

使用java查询MySQL数据库

伙计们,简单地说,我有一个带有文本输出框的java应用程序.我想查询Db并将输出显示到文本框中.

示例我有一个带有两列food和的Dbcolor

我想 :

SELECT * in Table WHERE color = 'blue'
Run Code Online (Sandbox Code Playgroud)

有什么建议?

java mysql database entitymanager

22
推荐指数
2
解决办法
7万
查看次数

JAVA:多线程环境中的EntityManager对象

如果我有多个线程,每个使用注入器来获取EntityManager对象,每个使用em对象来选择其他类对象的列表.准备用于for循环.

如果一个线程首先完成并调用clear(),那会影响其他线程吗?喜欢for循环会有异常吗?

close()怎么样?

如果答案是"它取决于",那么(类定义?方法调用?)和where(java code?annotation?xml?)应该看看它是如何依赖的?

我没有写源,我只是在没有文档的情况下使用其他人的库.

谢谢.

java persistence entitymanager

22
推荐指数
3
解决办法
3万
查看次数

使用CDI在Java EE应用程序中获取对EntityManager的引用

我正在使用Java EE 7.我想知道将JPA EntityManager注入应用程序范围的 CDI bean 的正确方法是什么.您不能只使用@PersistanceContext注释注入它,因为EntityManager实例不是线程安全的.假设我们希望EntityManager在每个HTTP请求处理的开始时创建我们,并在处理HTTP请求后关闭它们.我想到了两个选择:

1.创建一个请求范围的CDI bean,它具有对a的引用EntityManager,然后将bean注入到应用程序范围的CDI bean中.

import javax.enterprise.context.RequestScoped;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@RequestScoped
public class RequestScopedBean {

    @PersistenceContext
    private EntityManager entityManager;

    public EntityManager getEntityManager() {
        return entityManager;
    }
}
Run Code Online (Sandbox Code Playgroud)
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;

@ApplicationScoped
public class ApplicationScopedBean {

    @Inject
    private RequestScopedBean requestScopedBean;

    public void persistEntity(Object entity) {
        requestScopedBean.getEntityManager().persist(entity);
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,EntityManager将在创建时RequestScopedBean创建,并在RequestScopedBean销毁时关闭.现在我可以将注入移动到一些抽象类中以将其从中删除ApplicationScopedBean.

2.创建一个生成实例的生产者,EntityManager然后将EntityManager实例注入到应用程序范围的CDI bean中.

import …
Run Code Online (Sandbox Code Playgroud)

java jpa entitymanager cdi java-ee-7

22
推荐指数
2
解决办法
2万
查看次数

EntityManager刷新问题

当我调用刷新函数时,我从我的EntityManager收到此错误.

public void saveProduct(Product product) {
    entityManager.refresh(product);
}
Run Code Online (Sandbox Code Playgroud)

我听说这可能是Spring/Hibernate的一个错误,但是我不知道如何解决这个问题.

编辑:错误是

java.lang.IllegalArgumentException: Entity not managed
org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:268)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:358)
$Proxy17.refresh(Unknown Source)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:198)
$Proxy11.refresh(Unknown Source)
springapp.repository.JdbcProductDao.saveProduct(JdbcProductDao.java:66)
springapp.service.SimpleProductManager.increasePrice(SimpleProductManager.java:28)
springapp.web.PriceIncreaseFormController.onSubmit(PriceIncreaseFormController.java:39)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:421)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:136)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:326)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:313)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Run Code Online (Sandbox Code Playgroud)

orm spring hibernate jpa entitymanager

21
推荐指数
3
解决办法
4万
查看次数

在Doctrine 2中,可以在运行时更改获取模式(Eager/Lazy等)吗?

我有我想要加载的实体,以及其他ocassions懒惰(甚至是额外的懒惰)加载.

我的映射没有在我的YAML中声明的获取模式 - 因此它们使用默认值(延迟加载).

目前,热切加载的唯一方法是手动构建DQL - 每次添加新实体时我都需要更新它.

理想情况下,我只是加载根实体和强制加载所有关联对象的力.有什么方法可以做到这一点吗?

如果不是为什么(是否有一个原因超出它是一个未实现的功能)?

orm doctrine datamapper entitymanager doctrine-orm

21
推荐指数
2
解决办法
3万
查看次数

如何使用EntityManager(JPA)在DAO中实现update()方法?

实现简单更新的标准方法是什么?

示例:我们的用户电话号码为NNNNNN,现在我们要将其设置为YYYYYY.

@PersistenceContext
private EntityManager em;

public void update (User transientUser) {
    what should be here?
}
Run Code Online (Sandbox Code Playgroud)

用户实体尽可能简单:

@Entity
@Table (name = "USER")
public class User {

    @Id
    @GeneratedValue
    private Integer id;

    @Column (nullable = false, unique = true)
    private String login;
    private String phone;

    public User () { }

    ... //some setters and getters
}
Run Code Online (Sandbox Code Playgroud)

java jpa entitymanager

20
推荐指数
1
解决办法
7万
查看次数

应用程序与容器管理的EntityManager

我目前在理解JPA的概念时遇到了问题.

我目前正在使用/开发最近的EclipseLink,Glassfish,Derby数据库来演示一个项目.

在我开发更大的图片之前,我需要绝对确定这个PersistingUnit如何在不同的范围内工作.

我有一堆servlet 3.0,目前在request.session对象中保存用户的相关实体类(同一个war文件中的所有内容).我目前正在使用EntityManagerFactory和UserTransaction注入的应用程序管理的EntityManager.它在我自己测试时运行顺畅.当2个人同时访问相同的实体时,会发生不同版本的实体.我希望使用托管bean跨越相同的WAR,如果可能的话,使用相同的持久性单元.

我已经阅读了http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html以及那些对我来说根本没有意义的范围的解释.

简而言之,应用程序和容器管理的EntityManagers的用途和区别是什么?

java jpa entitymanager

19
推荐指数
2
解决办法
9341
查看次数

当我们需要多个EntityManager时?

我正在学习JPA并且有一个问题:

在哪些情况下EntityManager,我们的应用程序需要多个?

我所知道的两种情况如下:

  • 当我们的应用程序是一个多线程应用程序并且多个线程需要JPA事务时,因为EntityManager它不是线程安全的,我们需要EntityManager每个线程一个.

  • 当任何线程需要多个并发事务时,我们EntityManager在该线程中需要多个,因为EntityManager和之间存在一对一的关系EntityTransaction.


Q1.当我们需要不止一个时,还有其他情况EntityManager吗?

Q2.根据我的理解,EntityManagerFactory每个Persitence单位应该只有一个.我对么?如果没有,那么当EntityManagerFactory每个持久性单元需要多个时,那些情况是什么?

java jpa entitymanager

18
推荐指数
1
解决办法
7450
查看次数

我们如何才能获得JPA EntityManager Flush工作

我的问题是为什么冲洗不起作用:

public void ejbService(){
   Customer c = em.find(Customer.class,1);
   c.setName("newName");
   em.flush();
   //at this point when I query mysql table I can not see "newName"


   thread.sleep(10000);

   c.setName("anotherName");
}
Run Code Online (Sandbox Code Playgroud)

完成方法后,我在db中看到"anotherName",我也用em.find(Customer.class,1,Lock.None)检查它; 但仍然不行

RGDS

java jpa transactions entitymanager

17
推荐指数
1
解决办法
2万
查看次数

JPA的模式:从实体生成数据传输对象DTO并将DTO合并到数据库

我正在寻找一种从JPA实体创建数据传输对象(DTO)的好方法,反之亦然.我想将DTO作为JSON发送到客户端,然后接收修改后的DTO并将其保存回数据库.在从JSON解析为Java类之后,从接收到的对象上的EntityManager执行合并方法将是最容易的. 

例如,有以下Entity和Rest方法用于保存修改后的对象:


@Entity
@Table(name="CUSTOMER")
public class Customer {
    @Id
    Long id;
    @Version
    Long version;
    String name;
    String address;
    String login;
    String password;
    String creditCardNumber;
    @OneToMany(cascade = CascadeType.ALL)
    List<Foo> fooList;

    ... Getter() and Setter()
}
Run Code Online (Sandbox Code Playgroud)
private EntityManager em;
@POST
@Path("/saveCustomer")
public void saveCustomer ( Customer  customer)   {               
   em.merge(customer);
   return;
}  
Run Code Online (Sandbox Code Playgroud)

只要我将整个实体类作为JSON发送并接收整个实体,这样就可以正常工作.然后,EntityManager将修改后的对象合并到数据库中.但是当我只想提供实体的一个子集(比如只有客户的名称和地址)时,会出现问题:

  1. 创建实体子集的最佳方法是什么?

        - 手工编写实体的DTO?这将为实体的每个子集生成重复的代码,必须对其进行维护.

  2. 如何将作为实体子集的DTO合并回数据库?

        - 使用EntityManager的merge()方法不起作用.起初,DTO不是实体,因此无法合并.只需从DTO创建实体,实体中就会有一些未设置的值.合并后,数据库中的值将为NULL.


我想出的一个想法是为我想要为实体指定的每个子集指定其他实体.(就像数据库视图一样)这将是重复的代码,但它可以解决DTO与数据库合并的问题.(也许这段代码可以自动生成)

例如,实体CustomerView1链接到与Customer类相同的表,但仅提供客户的名称和地址.它是真正的Customer类的DTO,可以作为JSON发送并在服务器外部进行修改.然后,该类也可以由EntityManager合并到数据库.

@Entity
@Table(name="CUSTOMER")
public class CustomerView1 {
    @Id
    Long id;
    @Version
    Long version;
    String name;
    String address;
    
        ... Getter() and Setter() …
Run Code Online (Sandbox Code Playgroud)

java jpa dto entitymanager java-ee

17
推荐指数
1
解决办法
2万
查看次数