我是Java EE的新手.我试着运行一些第一个例子(JPA).我正在使用Glassfish v3.麻烦的是我没有让App Server注入EntityManager.听到了一个例子http://www.adam-bien.com/roller/abien/entry/ejb_3_persistence_jpa_for ,我用JSP客户端进行了扩展.
实体:
package beans;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String title;
private String subtitle;
public Book() {
}
public Book(String title) {
this.title = title;
}
}
Run Code Online (Sandbox Code Playgroud)
BookService接口:
package beans;
import javax.ejb.Local;
@Local
public interface BookService {
Book createOrUpdate(Book book);
void remove(Book book);
Book find(Object id);
}
Run Code Online (Sandbox Code Playgroud)
BookServiceBean:
package beans;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class BookServiceBean implements BookService { …
Run Code Online (Sandbox Code Playgroud) 大家好:我阅读了关于这一点的 spring 参考。
我会选择在我的 DAO 中使用 @PersistenceContext 来注入共享事务实体管理器,但是由于我在指向 2 个不同持久性单元的两个 entityManagerFactories 上使用了 GenericDaoJpaImpl 模式,所以我不能使用它。
所以现在在我的应用程序中我有这个配置:
entityManagerFactoryies:
<bean id="entityManagerFactoryIban0" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/contratto-persistence-iban0.xml" />
</bean>
<bean id="entityManagerFactoryCont0" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/contratto-persistence-cont0.xml" />
</bean>
<bean abstract="true" id="abstractDaoJpaImplIban0" lazy-init="false">
<property name="entityManagerFactory" ref="entityManagerFactoryIban0" />
</bean>
<bean abstract="true" id="abstractDaoJpaImplCont0" lazy-init="false">
<property name="entityManagerFactory" ref="entityManagerFactoryCont0" />
</bean>
Run Code Online (Sandbox Code Playgroud)
然后我的每个 DAO 都是 GenericDaoImpl 的一个实例:
@Repository
public class GenericDaoJpaImpl<T, ID extends Serializable> implements GenericDao<T, ID> {
private Class<T> entityClass;
private EntityManagerFactory entityManagerFactory;
public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory; …
Run Code Online (Sandbox Code Playgroud) 我有三个spring + JPA项目......一个基础项目A,一个插件项目B和实际项目C.在C中,两个其他项目都作为A.jar和B.jar导入.每个项目都有自己的ApplicationContext.xml.叶子项目即C将其persistence.xml置于自定义位置,如proeject-A中的appcontext.xml中所述(启动项目A在整个类路径中查找appcontext.xml和persistence.xml,因此能够从B加载xmls)和C).
下面是我的配置,ApplicationContext.xml - 在项目A中
<bean id="jpaQueryManager" class="com.motherframework.base.dao.jpa.JPAQueryManager">
<property name="jpaTemplate" ref="jpaTemplate"/>
</bean>
<bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!-- <property name="persistenceUnitManager" ref="pum"/>
<property name="persistenceUnitName" value="SchoolWebsitePersistenceUnit"/> -->
<property name="persistenceXmlLocation" value="classpath*:configuration/xml/persistence.xml"/>
<!-- <property name="persistenceUnitPostProcessors">
<list>
<bean class="com.motherframework.base.dao.jpa.EntityScanner"/>
</list>
</property> -->
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
<property name="generateDdl" value="true"/>
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
</bean>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
这是我的persistence.xml
<persistence-unit name="SchoolWebsitePersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.motherframework.plugin.school.entity.Account</class>
<class>com.motherframework.plugin.school.entity.Module</class>
<class>com.motherframework.plugin.school.entity.NavigationMenu</class>
<class>com.motherframework.plugin.school.entity.User</class>
<properties>
<property name="dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<property name="hibernate.connection.autocommit" value="true"/>
<property name="hibernate.cache.provider_class" …
Run Code Online (Sandbox Code Playgroud) 我是EJB新手,创建一个有趣/学习EJB的应用程序以下是代码.
@Entity
@Table(name = "PERSON", schema = "experiment")
@NamedQuery(name = "Person.fetchAllPerson" , query = "select p from Person p")
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "name", length = 500)
private String name;
@Column(name = "age")
private Integer age;
public Long getId() {
return id;
}
// public void setId(Long id) {
// this.id = id;
// }
public String getName() { …
Run Code Online (Sandbox Code Playgroud) 我在尝试更新对象时偶然发现了这个错误,但找不到任何解释.这是我的代码:
实体
namespace Mnv\CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Class UtilitatiVariabile
* @package Mnv\CoreBundle\Entity
*
* @ORM\Table(name="utilitati_variabile")
* @ORM\Entity(repositoryClass="Mnv\CoreBundle\Entity\Repository\UtilitatiVariabileRepository")
*/
class UtilitatiVariabile {
/**
* @var integer
*
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @var float
*
* @ORM\Column(type="decimal", precision=10, scale=6, nullable=true)
*/
protected $coeficient;
/**
* @var float
*
* @ORM\Column(type="decimal", precision=10, scale=2, nullable=true)
*/
protected $kwh;
/**
* @var float
*
* @ORM\Column(name="original_kwh", type="decimal", precision=10, scale=2, nullable=true)
*/
protected $originalKwh;
/**
* …
Run Code Online (Sandbox Code Playgroud) EntityManager 和 DAO 有什么区别?是一样的吗?
我有以下内容 SQL Query :
SELECT COUNT(*) FROM DOG where ID = 'SampleId';
Run Code Online (Sandbox Code Playgroud)
我试着写这个java
:
public int returnCountOfDogTable(String id){
String sql= "SELECT COUNT(*) FROM DOG WHERE ID =:id";
Query query = persistence.entityManager().createNativeQuery(sql);
query.setParameter("id", id);
List<Integer> resultList = query.getResultList();
int result = resultList.get(0);
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个例外:
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
我正在尝试使用springboot的简单编码,使用entitymanager中的@PersistenceContext,在mysql中创建一个对象,但我得到的是我的entitymanager对象为null并且不确定原因,因为正在使用的方法entitymanager有@transaction注释.
提前致谢!
这是我调用插入数据的方法的代码:
import org.hibernate.service.spi.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@Component
public class VehicleService implements IVehicleService {
@Autowired
IFileService fileService;
@Transactional
public void addVehicle(Vehicle vehicle) throws ServiceException{
Vehicle vehicleNew = new Vehicle();
vehicleNew.setName(vehicle.getName());
vehicleNew.setType(vehicle.getType());
vehicleNew.setEnrollment(vehicle.getEnrollment());
try{
fileService.createVehicle(vehicle);
}catch(Exception e){
}
}
}
import org.hibernate.service.spi.ServiceException;
import org.springframework.transaction.annotation.Transactional;
public interface IFileService {
@Transactional
void createVehicle(Vehicle vehicle) throws ServiceException;
}
Run Code Online (Sandbox Code Playgroud)
这是我调用entitymanager的地方,并且始终为null:
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Component;
@Component
public class FileService implements IFileService{
@PersistenceContext
protected EntityManager entityManager;
public void createVehicle(Vehicle vehicle) { …
Run Code Online (Sandbox Code Playgroud) 我试图在执行时捕获异常:
try {
$em->remove($education);
$em->flush();
} catch(PDOException $e) {
var_dump($e->getMessage());
die;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试了\Exception
和\Doctrine\ORM\ORMException
,但没有一个起作用。
我得到的是相同的错误,而不是转储异常消息,我试图避免捕获异常:
[3/3] ForeignKeyConstraintViolationException:执行“从Trainee_education WHERE id =?中删除”时发生异常。带有参数[2]:
SQLSTATE [23000]:违反完整性约束:1451无法删除或更新父行:外键约束失败(
trainingexperience
。internship
,CONSTRAINTFK_10D1B00C2CA1BD71
FOREIGN KEY(education_id
)参考trainee_education
(id
))
我知道为什么我的约束失败了,没有新内容。但是我想得到一个例外,这样我可以通知用户他无法删除对象,因为他在创建关系之前曾使用过该对象。
我尝试过@PersistenceContext
、@PersistenceUnit
和@Inject
组合,但没有任何效果。@Inject 使 maven-quarkus-plugin 构建失败:
[错误] 由:javax.enterprise.inject.UnsatisfiedResolutionException: 类型 javax.persistence.EntityManager 和限定符 [@Default] 的不满意依赖项引起
我尝试过使用和不使用persistence.xml。我的数据源和 application.properties 工作正常,因为我可以只注入 AgroalDataSource 并执行直接 JDBC,但我想移植我的 JPA 实体类并使用它们。
我的父模块 pom
<!-- versions set by quarkus-bom, but they don't pass in, when changing quarkus version, update this from quarkus bom -->
<properties>
<quarkus.version>1.0.0.CR1</quarkus.version>
<agroal.version>1.7</agroal.version>
<jakarta.enterprise.cdi-api.version>2.0.2</jakarta.enterprise.cdi-api.version>
<jboss-jaxrs-api_2.1_spec.version>2.0.1.Final</jboss-jaxrs-api_2.1_spec.version>
<jboss-logging.version>3.3.2.Final</jboss-logging.version>
<jboss-threads.version>3.0.0.Final</jboss-threads.version>
<smallrye-config.version>1.3.9</smallrye-config.version>
<wildfly-common.version>1.5.0.Final-format-001</wildfly-common.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-universe-bom</artifactId>
<version>${quarkus.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
<dependencies>
<dependency>
<groupId>com.lmco.is3.cs</groupId>
<artifactId>datatypes</artifactId>
<exclusions>
<exclusion>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</exclusion>
</exclusions>
<version>1.0-SNAPSHOT</version> …
Run Code Online (Sandbox Code Playgroud) entitymanager ×10
java ×5
jpa ×4
doctrine ×2
spring ×2
symfony ×2
dao ×1
doctrine-orm ×1
ejb ×1
exception ×1
glassfish ×1
hibernate ×1
int ×1
integer ×1
jakarta-ee ×1
java-ee ×1
lazy-loading ×1
mysql ×1
quarkus ×1
zk ×1