小编Tom*_*sky的帖子

如何从持久性单元获取所有@Entity类?

问题

我正在编写一个独立的实用程序,给定一个包含JPA-2注释持久性单元的jar,需要以编程方式获取特定持久性单元中所有@Entity类的列表.

我想决定采用哪种方法来获取这些信息,以及为什么; 或者如果有另一种更好的方式我没有想到.

解决方案1

Java程序将jar放在类路径上,使用JavaSE方法从jar中的类创建持久性单元.然后它使用javax.persistence类来获取JPA Metamodel,从中拉回类令牌列表.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("MY_ PERSISTENCE_UNIT");
Metamodel mm = emf.getMetamodel();

// loop these, using getJavaType() from Type sub-interface to get 
// Class tokens for managed classes.
mm.getManagedTypes();
Run Code Online (Sandbox Code Playgroud)

解决方案2

程序扫描指定jar中的目录和文件以获取persistence.xml文件,然后找到具有指定持久性单元名称的文件.然后XPath文件获取<class>XML元素列表并从那里读取完全限定的类名.从名称,构建类标记.

限制/关注

  • 如果可能的话,我想采用方法1.
  • 此实用程序不会在容器内运行,但jar是一个旨在在其中运行的EJB项目.这将是一个什么问题?
  • 该实用程序将在类路径上提供Open-EJB,以获取所有Java EE 6类的实现.
  • 即使EJB项目是为了在Hibernate上运行而构建的,该实用程序也不应该是特定于Hibernate的.
  • 有绊脚石吗?

java jpa java-ee jpa-2.0

14
推荐指数
2
解决办法
6764
查看次数

.NET属性与Java注释:哪个先来?

我是一名学习Java EE的.NET开发人员.这两个概念似乎在任一系统中都具有相同的用途.

那么哪个框架可以用来发明它们呢?

.net java-ee

13
推荐指数
3
解决办法
3414
查看次数

VB6 ADO连接 - 如何检查是否在事务中?

有没有办法告诉,只使用ADODB.Connection对象,它是否当前涉及一个事务?

我希望能够在连接对象本身上测试它,而不依赖于更新旁边的布尔值.

vb6 ado

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

class.getName()贵吗?

在我正在处理的项目的许多类中,我看到名为CLASS_NAME的私有静态最终成员,其定义如下:

public class MyClass {
  private static final String CLASS_NAME = MyClass.class.getName();
  //...
}
Run Code Online (Sandbox Code Playgroud)

这样做有什么好处来获取类名,而不是MyClass.class.getName()直接在需要名称的地方进行调用?

java

11
推荐指数
2
解决办法
1780
查看次数

在Eclipse中使用相等运算符(==)进行字符串比较时突出显示

有没有什么方法可以让Eclipse强调使用==运算符来测试String的相等性?我一直误用而不是打电话.equals().

我真的想把它变成一个警告并需要一个@SuppressWarnings注释去除它,在尚未发生的情况下,我实际上想比较字符串的对象相等性.

我是否可以使用任何工具来帮助在编辑时打破这种坏习惯?

java eclipse equality suppress-warnings

10
推荐指数
2
解决办法
4688
查看次数

为什么默认的Object.toString()返回hashCode的十六进制表示?

我很好奇为什么要Object.toString()回报这个:

return getClass().getName() + "@" + Integer.toHexString(hashCode());
Run Code Online (Sandbox Code Playgroud)

与此相反:

return getClass().getName() + "@" + hashCode();
Run Code Online (Sandbox Code Playgroud)

将哈希码显示为十六进制而不是十进制有什么好处?

java hash tostring hashcode

10
推荐指数
2
解决办法
7522
查看次数

什么是在VB6中实现的集合?

因此,VB6中的集合会跟踪每个对象的键,您可以通过其键查找对象.

这是否意味着集合被实现为某种哈希表?我意识到你可以在一个集合中拥有多个具有相同键的项目,因此有些东西.

有谁知道VB6集合应该代表什么类型的数据结构?

vb6 collections

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

忽略import语句上的不推荐使用的类型警告

我正在导入一个已被弃用的类,我不得不使用它.

我想使用@SuppressWarnings("deprecation")注释来抑制已弃用的错误.

根据该注释的评论:

作为一种风格问题,程序员应该始终在最有效的嵌套元素上使用此注释.如果要在特定方法中禁止警告,则应该注释该方法而不是其类.

所以我显然不希望对类进行注释,从而抑制我的类使用的任何类型的弃用警告,但我也想使用该import语句来避免在每个类型上键入完全限定的类型名称,该名称跨越我的整个监视器.使用已弃用的类.

我想我想做一些事情,比如import@SuppressWarnings(不可能)注释语句或在@SuppressWarnings注释中指定哪种类型忽略警告(例如@SuppressWarnings("deprecation", "fully.qualified.type.name").

我想向编译器表明"如果我使用这个,这是可以的,只有这个,不推荐使用的类,由其简单名称引用,在这个其他类中的任何地方,以及我引用你的任何其他已弃用的类应该让我知道" .

有这样的东西吗?

java

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

为什么引用不会在finalize方法覆盖时放入引用队列

public class Test {
    public static void main(String[] args) throws Exception {
        A aObject = new A();

        ReferenceQueue<A> queue = new ReferenceQueue<>();
        PhantomReference<A> weak = new PhantomReference<>(aObject, queue);

        aObject = null;
        System.gc();

        TimeUnit.SECONDS.sleep(1);

        System.out.println(queue.poll());
    }
}

class A{
    @Override
    protected void finalize() throws Throwable {
        // TODO Auto-generated method stub
        super.finalize();

        System.out.println("finalize");
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是:

finalize
null
Run Code Online (Sandbox Code Playgroud)

但如果我删除A类中的finalize方法,结果是:

java.lang.ref.PhantomReference@5b2c9e5d
Run Code Online (Sandbox Code Playgroud)

所以,结果显示当我覆盖finalize方法时,弱对象没有被放入引用队列,那是因为aObject复活了吗?但我在finalize方法中没有做任何事情

java reference finalize

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

是否应该在三元运算符周围放置括号?

Checkstyle抱怨以下内容:

return (null == a ? a : new A());
Run Code Online (Sandbox Code Playgroud)

并且说这些是不必要的.

虽然声明在没有它们的情况下确实可以正常工作,但它们在现在看起来更具可读性 - 否则当我读它时我倾向于看到:

return null
Run Code Online (Sandbox Code Playgroud)

首先,然后必须暂停考虑剩下的

== a ? a : new A(); 
Run Code Online (Sandbox Code Playgroud)

部分,因为我的大脑已经走了一条路.

此外,每当我看到三元运算符,我倾向于做同样的事情,除非它被分组为parens.

所以:围绕三元的parens应该是事实上的标准吗?有没有理由不把它们放在那里?

java ternary-operator

8
推荐指数
2
解决办法
4495
查看次数