6

有很多关于 Java 对象大小的问答,这很容易理解。但我想知道 PermGen 空间中 Java 类的大小。

我想知道这个的原因是因为我正在编写一个代码生成器,生成很多类。本质上,我为数据库中的每个表/视图生成两个类。现在我还想为外键关系建模。而不是维护一个复杂的,可序列化的对象结构(考虑一个具有唯一键的表被属于其他具有其他外键的其他表的几个外键引用等),我宁愿生成一个类UNIQUE KEY和一个类FOREIGN KEY.

以下是我的问题:

  1. 我将在类加载器和 PermGen 空间上创建多少开销?
  2. public类、static类和private成员类之间有区别吗?
  3. 您是否看到在源代码中生成外键信息的更好方法?
4

1 回答 1

2

我找到了一个不同的解决方案,它不像每个KEY. 我生成一个大致如下所示的类:

public class References {

    // First, initialise all unique keys
    public static final UniqueKey<TAuthorRecord> SysPk_14655 = 
        createUniqueKey(TAuthor.T_AUTHOR, TAuthor.ID);


    // Then initialise all foreign keys
    public static final Reference<TBookRecord, TAuthorRecord> SysFk_14666 = 
        createReference(SysPk_14655, TBook.T_BOOK, TBook.AUTHOR_ID);
    public static final Reference<TBookRecord, TAuthorRecord> SysFk_14667 = 
        createReference(SysPk_14655, TBook.T_BOOK, TBook.CO_AUTHOR_ID);


    // Factory method for unique keys
    protected static <R extends Record> UniqueKey<R> 
    createUniqueKey(Table<R> table, TableField<R, ?>... fields) {

    // Factory method for foreign keys referencing unique keys
    protected static <R extends Record, U extends Record> Reference<R, U> 
    createReference(UniqueKey<U> key, Table<R> table, TableField<R, ?>... fields) {

}

然后,生成的表类中的实际表可以引用和使用上述键。根据BobG在他的一条评论中的建议,我查看了 JPA 注释。但我发现它们描述起来不是很有用:

  • 多字段键(@IdClass需要一个类型作为参数,我想避免这种类型)
  • 多字段引用(怎么做?)
  • 使用不同的键从一个表到另一个表的多个引用
  • 唯一键,与主键共享许多属性。

一些评论提到了为什么我应该创建这样一个生成器,因为有很多已建立的框架。我这样做是为了http://www.jooq.org。而且我觉得 jOOQ 正在填补当今数据库抽象可能性方面的空白。

于 2011-05-03T06:05:54.277 回答