我正在构建一个基于Gradle的Java SE应用程序,它基于Hibernate构建,是我的首选ORM.我的计划是weld-se使用CDI注释EntityManagers在整个应用程序中进行注射.
基于HibernateUtilHibernate文档中的常见帮助程序类,我转向JPA接口并添加了@Produces注释以提供生产者方法(我还添加了一个空META-INF/beans.xml):
package dao;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class HibernateUtil {
private static final EntityManagerFactory emf = buildEntityManagerFactory();
private static EntityManagerFactory buildEntityManagerFactory() {
try {
return Persistence.createEntityManagerFactory("persistenceUnit");
} catch (Throwable ex) {
System.err.println("Initial EntityManagerFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
@Produces
public static EntityManager createEntityManager() {
return emf.createEntityManager();
}
public static void closeEntityManager(@Disposes EntityManager em) {
System.out.println("Closing EM");
try …Run Code Online (Sandbox Code Playgroud) 我正在使用NHibernate进行数据库管理.在一个类中,我使用以下公式计算属性:
(SELECT MIN(x.timestamp) FROM (SELECT MAX(r.Timestamp) AS timestamp, r.Meter_Id FROM Reading r, Meter m WHERE r.Meter_Id = m.Id AND m.Store_Id = Id GROUP BY r.Meter_Id) AS x)
Run Code Online (Sandbox Code Playgroud)
生成的查询如下所示:
(SELECT MIN(x.timestamp) FROM (SELECT MAX(r.Timestamp) AS timestamp, r.Meter_Id FROM Reading r, Meter m WHERE r.Meter_Id = m.Id AND m.Store_Id = this_.Id GROUP BY r.Meter_Id) AS this_.x)
Run Code Online (Sandbox Code Playgroud)
显然,AS语句中的名称被重命名为this_.x,这会导致错误.
这似乎是一个众所周知的错误:NHibernate JIRA#NH-2878
enyone有解决方案吗?
Enterprise Architect通过将关联分类器的名称放在斜体的专用分类器的右上角,为泛化关系提供嵌入式文本符号.该EA UML2教程列表

作为通常表示法的等效替代
测试http://www.sparxsystems.com/images/screenshots/uml2_tutorial/CL07.GIF
我想知道这个视觉呈现是否特定于EA,或者UML规范是否有任何关于此的说法.UML基础结构中的Generalization和Class/Classifiers部分都没有包含此方向的任何指针.
我正在尝试将Eclipse Texo集成到我现有的Hibernate项目中.我已经在ECore中建模了我的域模型,并使用Texo和常规的EMF代码生成从那里生成了EMF和POJO代码.
存储在数据库中的获取实体(POJO)可以正常工作,现在我想使用Texo ModelEMFConverter将Hibernate映射的数据模型转换为相应的EMF模型.但是,由于Hibernate返回的实体被透明代理,此尝试失败.Texo ModelResolver无法为这些代理实体查找模型描述符,因为它将实体的类(它是代理类)与映射的类进行比较,并在我的情况下失败并出现异常:
线程"main"中的异常java.lang.IllegalStateException:类org.eclipse.emf.texo.utils.Check.isNotNull(Check.java:66)中的ModelResolver不管理类class foobar.Entity _ $$ _ jvst4f2_5位于org.eclipse.emf.texo.resolver的org.eclipse.emf.texo.model.ModelResolver.getModelObject(ModelResolver.java:298)的.eclipse.emf.texo.model.ModelResolver.getModelDescriptor(ModelResolver.java:366) .defaultObjectResolver.toUri(DefaultObjectResolver.java:188)org.eclipse.emf.texo.resolver.DefaultObjectResolver.resolveToEObject(DefaultObjectResolver.java:98)at org.eclipse.emf.texo.converter.ModelEMFConverter.createTarget(ModelEMFConverter.java) :146)org.eclipse上的org.eclipse.emf.texo.converter.ModelEMFConverter.convertSingleEReference(ModelEMFConverter.java:265)org.eclipse.emf.texo.converter.ModelEMFConverter.convertContent(ModelEMFConverter.java:189). emf.texo.converter.ModelEMFConverter.convert(ModelEMFConverter.java:107)[...]
相关代码位来自ModelResolver:
public ModelObject<?> getModelObject(final Object target) {
/* ... snip ... */
final ModelDescriptor modelDescriptor = getModelDescriptor(target.getClass(), true);
return modelDescriptor.createAdapter(target);
}
Run Code Online (Sandbox Code Playgroud)
我尝试手动展开代理实体,然后使用以下代码将它们传递给模型转换器:
final List<Object> objects = entities
.stream()
.map(o ->
o instanceof HibernateProxy ?
(Entity) ((HibernateProxy) o).getHibernateLazyInitializer().getImplementation() : o)
.collect(Collectors.toList());
final ModelEMFConverter converter = new ModelEMFConverter();
final Collection<EObject> eObjects = converter.convert(objects);
Run Code Online (Sandbox Code Playgroud)
从理论上讲,这种方法似乎有效(我通过单步执行转换代码进行检查),但是对于我的数据模型中的关联引用的实体来说,它没有包含在原始entities列表中.我想避免必须手动遍历整个对象图以摆脱代理.
有没有办法从Hibernate中检索未经过代理的实体?或者,是否有人可能会建议如何从不同的角度进行此模型转换?
感谢您的帮助!
我的一个伙伴目前正在使用Java中的JpCap进行修补,我们发现了一些有关Java 中正则表达式的有趣(可能是?)问题.
仅捕获HTTP流量并随后进行分析.为此他正在使用这样的模式:
Pattern p = Pattern.compile("(www)");
Run Code Online (Sandbox Code Playgroud)
但是我们两个人都无法找到:为什么上述模式根本不会产生匹配,而以下情况如下:
Pattern p = Pattern.compile(".*(www).*");
Run Code Online (Sandbox Code Playgroud)
我可以看到,这些都应该是相同的,不是吗?我没有那么多关于正则表达式的经验,所以对这个问题可能有一个非常简单的答案:)