Tag: jpa

JPA EntityManager的合并方法会导致OptimisticLockException吗?

假设我想合并一个分离的实体。 当我做 T mergedEntity = entityManager.merge(detachedEntity); entityManager将从数据库加载一个实体(与detachedEntity具有相同的标识符),并将detachedEntity中的所有数据复制到新加载的实体。 稍后我的交易结束时,该实体将被保存到数据库中。 但是,在并发方案中,数据库中的实体可以由实体之间的其他事务更新,首先在我的事务中加载,然后在事务结束时刷新。 在这种情况下,我想知道是否会抛出OptimisticLockException? 如果是这样,为什么合并API没有在Java doc中指定OptimisticLockException? http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#merge(T) 谢谢

什么是Spring Framework中的EJB替代方案

我试图学习Spring Framework,之前我曾经用EJB创建应用程序 [Web services]->[Business Layer]->[DAO Layer] | [数据库] 以下方式 WebServices :使用Jersey和url mappings Restful API,支持JSON和XML格式( news/list.json , news/list.xml )。 一旦端点(url-mapped-method)收到请求,它就会通过查找(远程,本地)转发到相关的EJB。 EJB处理每一件事,应用业务规则并将结果作为DTO(数据传输对象)返回,然后Service将结果转换为所需的格式(JSON,XML) 业务层 :在EJB使用remote和local接口实现的业务层(Facade),这些EJB可以调用其他EJB。 WebService层(和/或Timer服务和MDB)也可以调用任何EJB)。 对于与计时器服务相关的function,我使用了EJB Timer Service ,而Message使用了Message Drive Bean和拦截器来进行日志记录和审计。 DAO Layer :所有与数据库相关的函数(添加,编辑,删除,搜索)使用EntityManager编写JPA/Hibernate (实体bean和HQL)。 无缝事务支持,每个EJB的方法(基于查询)调用被视为一个单独的事务,DAO层的调用方法是同一事务的一部分(假设没有提供额外的配置)。 在单个事务中执行多个操作如果一个db操作失败,则所有其他操作将自动回滚。 每个表都映射为具有关系等的实体类。 我曾经在Spring MVC但是无法正确地映射/理解上面的架构我对AOP有点了解并且我认为它是拦截器的完美替代品(或者至少它对我有用) 现在我的问题是如何在Spring框架中替换所有这些 ? 泽西(RestAPi)替代spring> Spring中的EJB替代方案(因为EJB支持远程处理,对方法的每次查找调用都被视为事务,对EJB方法的调用可以被拦截,并且它带有状态完全和无状态的风格)? Spring中的定时服务替代方案? Spring中的Message Drive Bean替代方案? 拦截器替代品是春季的AOP(根据我的经验,这符合我的目的) JPA(实体经理)在春季的替代方案?

使用EAGER @ElementCollection对find()进行Hibernate LazyInitializationException

我收到org.hibernate.LazyInitializationException: illegal access to loading collection我的JPA代码中的org.hibernate.LazyInitializationException: illegal access to loading collection – 所有集合都是EAGER fetch – 当集合实体也有一个集合时。 有人可以帮我解决这个问题吗? 我已将我的JPA代码中的问题与以下@Entity定义隔离开来: (注意,我正在跳过包并导入语句以缩短代码。使用了一些Lombok注释,例如@Data表示该字段具有getter / setter,而@Cleanup用于执行通常的try / catch close()舞蹈) @Entity @Data public class MyEntity implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; // @ElementCollection(fetch = FetchType.EAGER) // private Set tags = Sets.newTreeSet(); } @Entity @Data public class MyOtherEntity […]

引起:java.lang.ClassCastException:java.lang.Class无法强制转换为java.lang.reflect.ParameterizedType

我是Java Reflection的新手。 我检查了很多论坛,但我还没有找到合适的解决方案。 错误: Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType 当我试图从db获取对象时: new Unit().getBy(3L); 方法声明 @MappedSuperclass public abstract class Generic { @Transient public Class entityClass; Generic() { entityClass = ((Class) ((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0])); } @Id @GeneratedValue(strategy = GenerationType.TABLE) public Long id; public T getBy(Long id) { return JPA.em().find(entityClass, id); } 二级扩展 @MappedSuperclass public […]

JPA更新多对多删除记录

我在两个实体之间有@ManyToMany关系。 当我在拥有方执行更新时,JPA似乎从我的数据库中删除所有链接的记录并重新插入它们。 对我来说这是一个问题,因为我有一个MySQL触发器,在删除记录之前触发。 关于如何解决这个问题的任何想法? @Entity public class User { @Id @Column(name=”username”) private String username; … @ManyToMany @JoinTable(name=”groups”, joinColumns= @JoinColumn(name=”username”, referencedColumnName=”username”), inverseJoinColumns=@JoinColumn(name=”groupname”, referencedColumnName=”type_id”)) private List types; … } @Entity public class UserType { @Id @Column(name=”type_id”) private String id; @ManyToMany(mappedBy=”types”) private List users; … }

ParameterizedType并创建一个通用的dao

我尝试这个通用代码,因为我不想为我的数据库中的每个实体创建一个dao类,因为我有80个专门用于那些我将只执行CRUD查询的人。 因为在大多数情况下我只需要坚持或通过id进行查找。 public interface GenericDao { T create(T t); T read(PK id); T update(T t); void delete(T t); } 接口的impl @Component public class GenericDaoJpaImpl implements GenericDao { protected Class entityClass; @PersistenceContext protected EntityManager entityManager; public GenericDaoJpaImpl() { ParameterizedType genericSuperclass = (ParameterizedType) getClass() .getGenericSuperclass(); this.entityClass = (Class) genericSuperclass .getActualTypeArguments()[0]; } @Override public T create(T t) { […]

是否允许JPA实体中的方法抛出exception?

我有一个@Entity的问题我试图创建。 当尝试使用OpenJPA实现在Eclipse中测试类时会出现问题(我没有尝试过其他人,所以不确定它是否适用于它们)。 我的测试用例很简单,因为它创建了一个EntityManagerFactory(它会自动在我的类路径中找到persistence.xml),然后它尝试从工厂创建一个EntityManager。 这是我遇到一个非常模糊的’PersistenceException:null’错误。 有问题的实体是以下LogError类。 我把它剥离到最低限度,它仍然会抛出错误。 @Entity @Table(name = “T_LOG_ERROR”) public class LogError { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long ID; private String ERROR; protected LogError() {} public String getErrorName() throws FieldNullException { if (this.ERROR == null) throw new FieldNullException(“error was null”, null); return this.ERROR; } public setError(SystemError error) { this.ERROR = error.getClass().getCanonicalName(); } } […]

无法分配连接,因为:用户ID长度(0)超出1到255的范围

我正在使用带有JSF,EJB和JPA的Netbeans创建登录界面。 当我尝试部署项目时,它抛出以下exception: Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: User id length (0) is outside the range of 1 to 255. Error Code: 0. Please see server.log for more details. C:\Users\Dell\Desktop\assignmenttask2\nbproject\build-impl.xml:1033: The module has not been deployed. See the server log for details. 这是怎么造成的,如何解决?

Hibernate级联

Hibernate逆向工程生成的所有内容都是这样的 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name =“column_id”) public Itinerary getColumnId(){ 返回this.columnId; } 我想要这个场景:当会话刷新时,首先保存所有构造的子节点,然后根据FK约束保存父对象。 当然,孩子需要先保存(自动!),因为有FK约束。 你告诉我:有一个CASCADE选项,但如何在JPA中使用它? 我尝试像这样添加级联: @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.PERSIST) @JoinColumn(name =“column_id”) public Itinerary getColumnId(){ 返回this.columnId; } 对我不起作用。 先告诉我:应该用这个指令注释什么以及如何使它工作。 我得到“无法添加或更新子行:外键约束失败”exception。 事实上,我不想手工坚持一切! 只构造一个对象并坚持下去! 注释什么,使用什么指令以及如何使用?

ClassNotFoundException:org.hibernate.hql.internal.ast.HqlToken甚至在添加了classic.ClassicQueryTranslatorFactory 之后

可能重复: org.hibernate.HibernateException:无法实例化QueryTranslatorFactory:org.hibernate.hql.classic.ClassicQueryTransactionFactory 我正在使用Hibernate 4,Spring 3和JSF 2.0。 我正在运行jsf页面 org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.internal.ast.HqlToken [select generatedAlias0 from net.test.model.Request as generatedAlias0] 我已经在applicationContext.xml中的hibernate属性下面有以下内容 org.hibernate.hql.internal.classic. ClassicQueryTranslatorFactory 请注意我已经添加了org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean和org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter ,我怀疑在添加之后我再次获得org.hibernate.QueryException: ClassNotFoundException 我的问题是什么是ClassicQueryTranslatorFactory属性的ClassicQueryTranslatorFactory ? 如果没有这样的属性我怎么能解决这个问题? applicationContext.xml中 net.test.model.Request org.hibernate.dialect.Oracle10gDialect true org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory <!– Enable the configuration of transactional behavior based on annotations –> <!– Transaction Manager is defined –>