JPA持久性@Basic(optional = false)和@Column(nullable = false)JPA持久性之间有什么区别?
我把surefire和cobertura插件放在我的pom.xml,但我无法配置他们工作正常.或者cobertura不运行或测试执行两次.
那么,我怎么能配置它们一起运行的插件呢?
如果我以这种方式配置,cobertura不会运行:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.5.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果我以这种方式配置,测试将执行两次:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>cobertura</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
</plugin>
Run Code Online (Sandbox Code Playgroud) 考虑到有两个实体,即部门和员工,其中一个部门有N个员工.
在Departament:
@OneToMany(mappedBy = "department", fetch = FetchType.EAGER)
private Collection<Employee> employees = new ArrayList<Employee>();
Run Code Online (Sandbox Code Playgroud)
在员工中:
@ManyToOne(fetch = FetchType.EAGER)
private Department department;
Run Code Online (Sandbox Code Playgroud)
一切正常,但我想在没有设置反向关系的情况下将员工添加到部门.例如:
// I will add two employees to a department
department.getEmployees().add(employee1);
department.getEmployees().add(employee2);
// In fact, it is necessary to set the opposite side of the relationship
employee1.setDepartment(department);
employee2.setDepartment(department);
entityManager.merge(department);
//...
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:是否有某种方式(例如通过一些注释)JPA会理解它应该将更改传播到关系的另一端而不是我明确的那样?换句话说,我只想这样做:
department.getEmployees().add(employee1);
department.getEmployees().add(employee2);
entityManager.merge(department);
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我在DB中有双重插入的奇怪错误.我有以下课程:
我把问题放在junit测试中(我使用的是嵌入式Glassfish):
@Test
public void test() throws NamingException {
Dataset<TestEntity> dataset = this.lookupBy(DatasetBean.class);
Assert.assertNotNull(dataset);
TestEntity t = new TestEntity();
t.setName(UUID.randomUUID().toString());
dataset.insert(t);
System.out.println("end");
}
Run Code Online (Sandbox Code Playgroud)
测试流程如下:
在获取数据集对象后,我尝试插入TestEntity对象
@Stateless @EJB(name ="...",beanInterface = Dataset.class)公共类DatasetBean实现Dataset {
@PersistenceContext(type = PersistenceContextType.TRANSACTION)
private EntityManager entityManager;
@Override
public void insert(T entidade) {
LOG.info("Inserting: " + entidade);
entityManager.persist(entidade);
}
//...
Run Code Online (Sandbox Code Playgroud)
}
使用DatasetFactory,我尝试在TestEntity的@PostPersist方法中插入审计实体
公共类DatasetFactory {公共静态数据集createDataset(){尝试{回报率(数据集)新的InitialContext()查询( "...").} catch(Exception ex){throw new RuntimeException(ex); }}}
@Entity公共类TestEntity实现MyEntity {@Id private Integer id; …
我想使用entitymanager审核插入,更新,删除等.为此,我怎么能为EntityManager.class做一个可以使用EJB的拦截器???