标签: entitymanager

使用 Java Spring、Hibernate 和 EntityManager 在 @Transactional 方法中进行事务提交的问题

我正在尝试使用 maven 来学习 Spring、Hibernate 和 H2 数据库来构建代码。目前,我遇到一些问题,如何正确使用@Transactional注释来自动启动事务并在entityManager.persist成功完成或回滚时提交事务。

我的测试项目非常简单。POJO 类是 Person,包含名字、姓氏和电子邮件地址。有一个 Service 类 PersonSerice,它是一个提供 CRUD 功能来添加、更改、读取和删除人员数据的接口。有一个 PersonServiceImpl 调用 DAO 类的方法。这里是方法 PersonDAOImpl::createPerson 使用的示例代码

public void createPerson(Person person) {
    entityManager.getTransaction().begin();
    entityManager.persist(person);
    entityManager.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)

一切都按预期进行。有一个 Hibernate SQL 输出

“Hibernate:调用 hibernate_sequence 的下一个值 Hibernate:插入到 person (email, nachname, vorname, id) 值 (?, ?, ?, ?)”

我想摆脱手动调用entityManager.getTransaction().commit(); 所以我尝试在调用DAO方法的ServiceImpl方法处写@Transactional

    public void createPerson(Person person) {
    entityManager.getTransaction().begin();
    entityManager.persist(person);
    entityManager.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)

现在它无法正常工作。我刚刚明白了。“ Hibernate:调用 hibernate_sequence 的下一个值” 有一些内容写入数据库,但如果不手动提交,我无法列出所有条目或删除它们。所以我目前不知道出了什么问题以及如何让 @Transactional 自动执行提交。下面是 Eclipse 调试器中显示的实体管理器内容的一部分:

entityManager $Proxy26 (id=33) h ExtendedEntityManagerCreator$ExtendedEntityManagerInitationHandler (id=116)
containerManaged false
exceptionTranslator null jta …

java spring hibernate transactions entitymanager

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

EntityManager为null.不能注射

我正在尝试将我的项目与db连接.我有一个已经连接并在此数据库上运行的项目.我需要第二个并使用jms在它们之间进行通信.我配置secon连接到同一个数据库,它不工作.好的连接还可以.当我创建Entity类然后在db中我看到新表.很好.但我写的控制器应该注入实体管理器,它总是为空.我不知道为什么.这是我的配置.

@Configuration
@ComponentScan(basePackages = { "**.*****.**********" })
public class CalculationWorkerRootConfig {

    @Bean
    public static PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
        PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
        ppc.setLocation(new ClassPathResource("/persistence.properties"));
        return ppc;
    }

} 
Run Code Online (Sandbox Code Playgroud)

这是经理配置器:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories
public class CalculationWorkerPersistenceConfig implements TransactionManagementConfigurer {

    @Value("${dataSource.driverClassName}")
    private String driver;
    @Value("${dataSource.url}")
    private String url;
    @Value("${dataSource.username}")
    private String username;
    @Value("${dataSource.password}")
    private String password;
    @Value("${hibernate.dialect}")
    private String dialect;
    @Value("${hibernate.hbm2ddl.auto}")
    private String hbm2ddlAuto;

@Bean
public DataSource configureDataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(driver);
    dataSource.setUrl(url);
    dataSource.setUsername(username);
    dataSource.setPassword(password);
    return dataSource;
}

@Bean …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa entitymanager

0
推荐指数
1
解决办法
2290
查看次数

java createNamedQuery - 实体管理器和持久性

我在 java 中收到此错误消息。

你们中有人知道我该如何解决这个问题吗?

HTTP Status 500 - Filter execution threw an exception

类型 Exception report

信息 Filter execution threw an exception

描述 The server encountered an internal error that prevented it from fulfilling this request.

例外

javax.servlet.ServletException: Filter execution threw an exception
root cause

java.lang.Error: Unresolved compilation problem: 
The method createNamedQuery(String) in the type EntityManager is not applicable for the arguments (String, Class<User>)

bg.tu_sofia.cinema.dao.UserDAOImpl.getAllUsers(UserDAOImpl.java:22)
bg.tu_sofia.cinema.dao.UserDAOImpl.usernameExists(UserDAOImpl.java:52)
bg.tu_sofia.cinema.filters.UserReconcilerFilter.doFilter(UserReconcilerFilter.java:54)
note The full stack trace of the root cause is available in the …
Run Code Online (Sandbox Code Playgroud)

java entitymanager jpa-2.0 jakarta-ee

0
推荐指数
1
解决办法
4864
查看次数

从CrudRepository中的FindAll()打印记录

我正在我的Repository类中扩展CrudRepository.我想使用findAll方法打印表格中的记录.到目前为止,我已经编写了一个测试类,我可以看到结果查询是正确的.如何在表格中打印单个记录?

这是我的代码片段:Repository Class

public interface RepositoryAda extends CrudRepository{


}
Run Code Online (Sandbox Code Playgroud)

服务类

@Service
public class Service{

@Autowired private RepositoryAda repository;

@Transactional
public List selectRecords(){
  return  (List) repository.findAll();
 }

}
Run Code Online (Sandbox Code Playgroud)

测试用例:

@Test
public void getAllRecords() {
    service.selectRecords();
}
Run Code Online (Sandbox Code Playgroud)

如何将表中的各个记录打印到控制台?

java entitymanager hibernate-entitymanager

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

Doctrine EntityManager未注入Custom Validator

我创建了一个自定义验证器来检查两个数据库表中是否存在电子邮件.

namespace AgriHealth\AhpBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 */
class UniqueEmailAll extends Constraint
{
    public $message = 'This email is already in use';

    public function validatedBy()
    {
        return get_class($this).'Validator';
    }
} 

namespace AgriHealth\AhpBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class UniqueEmailAllValidator extends ConstraintValidator
{
    private $entityManager;

    public function __construct(EntityManager $entityManager)
    {
        $this->entityManager = $entityManager;
    }


    public function validate($value, Constraint $constraint)
    {
        $find1 = $this->entityManager->getRepository( 'AgriHealthAhpBundle:Vet')->findOneByEmail($value);
        $find2 = $this->entityManager->getRepository( 'AgriHealthAhpBundle:Farmer')->findOneByEmail($value);

        if ($find1 || $find2) {
            // If you're using the new 2.5 validation …
Run Code Online (Sandbox Code Playgroud)

validation entitymanager symfony doctrine-orm symfony-2.5

0
推荐指数
1
解决办法
2090
查看次数

实体管理器的测试用例

Mockito.when为下面的代码行获取空指针异常。

when(entityManager.createQuery(any(String.class)).setParameter(any(String.class), any(String.class)).getSingleResult()).thenReturn("2");
Run Code Online (Sandbox Code Playgroud)

试图模拟声明为的实体管理器

@Mock
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)

任何帮助解决这个问题?

完成测试类

@RunWith(MockitoJUnitRunner.class)
public class ASDAOImplTest {

    @InjectMocks
    ASDAOImpl asdaoImpl=new ASDAOImpl();
    @Mock
    private EntityManager entityManager;

    @Before
    public void setUp()
    {
        ReflectionTestUtils.setField(asdaoImpl,"capLimit", 1);
    }

    @Test
    @Ignore
    public void validateCappingTest()
    {
        when(entityManager.createQuery(any(String.class)).setParameter(any(String.class), any(String.class)).getSingleResult()).thenReturn("2");
        asdaoImpl.validateCapping("2");
    }
}
Run Code Online (Sandbox Code Playgroud)

junit entitymanager junit4

0
推荐指数
1
解决办法
4789
查看次数

为什么即使实体包含在DB中,'EntityManager.contains(..)'也会返回false?

我使用了这个JPA:检查实体对象是否已被持久化, 以确定我是否持久化或合并我的实体,它将如下所示:

if (!getEntityManager().contains(entity)) {
        System.out.println(" PERSIST ");            
    } else {
        System.out.println(" MERGE ");
    }
Run Code Online (Sandbox Code Playgroud)

案例是 - 即使我编辑我的实体 - 它也不会被识别为合并.

怎么可能以及如何使它工作?

java jpa entitymanager jpa-2.1

0
推荐指数
1
解决办法
772
查看次数

没有类型为“org.springframework.data.jpa.repository.support.JpaEntityInformation”的合格 bean

我正在尝试通过 BaseRepository 接口和 BaseRepositoryImpl 扩展 **SimpleJpaRepository **。
\nTha BaseRepositoryImpl 扩展 **SimpleJpaRepository ** 并实现 BaseRepository。

\n\n

此外,我还有一些其他存储库,例如扩展了 BaseRepository 的 CandidateRepository 和 EmployeeRepository。

\n\n

下面您可以看到错误后的代码:

\n\n

要查看项目结构,请单击此处

\n\n
    @NoRepositoryBean  \n    public interface BaseRepository<T, ID extends Serializable> extends JpaRepository<T, ID>{\n//..\n}\n\n\n@Repository\npublic abstract class BaseRepositoryImpl<T, ID extends Serializable> extends \n                                                    SimpleJpaRepository<T, ID> implements BaseRepository<T, ID>{\n\n    private final EntityManager em;\n\n    public BaseRepositoryImpl(JpaEntityInformation<T,ID> entityInformation, \n                                EntityManager entityManager) {\n\n      super(entityInformation, entityManager);\n      this.em = entityManager;\n\n  }\n  //..\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

扩展存储库:

\n\n
@NoRepositoryBean\n    public interface CandidateRepository extends BaseRepository<DatCandidate, UUID>{\n\n        //..\n    }\n\n\n@Repository(value="CandidateRepositoryImpl")\npublic …
Run Code Online (Sandbox Code Playgroud)

java spring repository entitymanager spring-data-jpa

0
推荐指数
1
解决办法
8164
查看次数

使用MYSQL 8通过JDBC语句执行DDL时出错

我在代码中遇到了一些麻烦。我一直在尝试此网站上所有可能的解决方案,但没有任何效果。我似乎无法理解可能是什么问题。

我尝试过的解决方案的链接:

Spring Boot,JPA错误:“通过JDBC语句执行DDL错误”

通过JDBC语句执行DDL的休眠错误

系统配置:Ubuntu 16.04 MySQL 8

    2018-11-06 12:38:52.273  INFO 16491 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
Hibernate: create table outputmessages (id integer not null, from varchar(255), message varchar(255), time datetime, topic varchar(255), primary key (id)) engine=InnoDB
2018-11-06 12:38:53.117  WARN 16491 --- [           main] o.h.t.s.i.ExceptionHandlerLoggedImpl     : GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at …
Run Code Online (Sandbox Code Playgroud)

java mysql spring entitymanager

0
推荐指数
1
解决办法
2299
查看次数

在 Symfony 5 迁移类中访问实体管理器?

我在我的表中添加了一个新闻关系,在 postUp() 方法中我想更新我的所有线程。

我如何访问迁移类中的 EntityManager 以获取我的所有线程、更新它们并保留/刷新我的修改?

migration doctrine entitymanager symfony

0
推荐指数
1
解决办法
273
查看次数