📄 toolsetguide.html
字号:
你可以用<tt class="literal"><meta></tt>标签来告诉<tt class="literal">hbm2java</tt>只生成"protectd" </p><p> 下面的例子: </p><pre class="programlisting"><class name="Person"> <meta attribute="class-description"> Javadoc for the Person class @author Frodo </meta> <meta attribute="implements">IAuditable</meta> <id name="id" type="long"> <meta attribute="scope-set">protected</meta> <generator class="increment"/> </id> <property name="name" type="string"> <meta attribute="field-description">The name of the person</meta> </property></class></pre><p> 会生成类似下面的输出(为了有助于理解,节选部分代码)。注意Javadoc注释和声明成protected的set方法: </p><pre class="programlisting">// default packageimport java.io.Serializable;import org.apache.commons.lang.builder.EqualsBuilder;import org.apache.commons.lang.builder.HashCodeBuilder;import org.apache.commons.lang.builder.ToStringBuilder;/** * Javadoc for the Person class * @author Frodo * */public class Person implements Serializable, IAuditable { /** identifier field */ public Long id; /** nullable persistent field */ public String name; /** full constructor */ public Person(java.lang.String name) { this.name = name; } /** default constructor */ public Person() { } public java.lang.Long getId() { return this.id; } protected void setId(java.lang.Long id) { this.id = id; } /** * The name of the person */ public java.lang.String getName() { return this.name; } public void setName(java.lang.String name) { this.name = name; }}</pre><div class="table"><a name="d0e9610"></a><p class="title"><b>表 15.6. 支持的meta标签</b></p><table summary="支持的meta标签" border="1"><colgroup><col><col></colgroup><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td><tt class="literal">class-description</tt></td><td>插入到类的javadoc说明去</td></tr><tr><td><tt class="literal">field-description</tt></td><td>插入到field/property的javadoc说明去</td></tr><tr><td><tt class="literal">interface</tt></td><td>如果是true,生成interface而非class</td></tr><tr><td><tt class="literal">implements</tt></td><td>类要实现的接口</td></tr><tr><td><tt class="literal">extends</tt></td><td>类要继承的超类(若是subclass,则忽略该属性)</td></tr><tr><td><tt class="literal">generated-class</tt></td><td>重新指定要生成的类名</td></tr><tr><td><tt class="literal">scope-class</tt></td><td>class的scope</td></tr><tr><td><tt class="literal">scope-set</tt></td><td>set方法的scope</td></tr><tr><td><tt class="literal">scope-get</tt></td><td>get方法的scope</td></tr><tr><td><tt class="literal">scope-field</tt></td><td>实际属性字段(field)的scope</td></tr><tr><td><tt class="literal">use-in-tostring</tt></td><td>在<tt class="literal">toString()</tt>中包含此属性</td></tr><tr><td><tt class="literal">implement-equals</tt></td><td>在这个类中包含<tt class="literal">equals()</tt>和<tt class="literal">hashCode()</tt>方法</td></tr><tr><td><tt class="literal">use-in-equals</tt></td><td>在<tt class="literal">equals()</tt>和<tt class="literal">hashCode()</tt> 方法中包含此属性</td></tr><tr><td><tt class="literal">bound</tt></td><td>为属性增加propertyChangeListener支持</td></tr><tr><td><tt class="literal">constrained</tt></td><td>为属性增加vetoChangeListener支持</td></tr><tr><td><tt class="literal">gen-property</tt></td><td>如果是false,不会生成属性(谨慎使用)</td></tr><tr><td><tt class="literal">property-type</tt></td><td>覆盖属性的默认值.如果值是标签,则指定一个具体的类型而非Object(Use this with any tag's to specify the concrete type instead of just Object.)</td></tr><tr><td><tt class="literal">class-code</tt></td><td>在类的最后会插入的额外代码</td></tr><tr><td><tt class="literal">extra-import</tt></td><td>在所有的import后面会插入的额外的import</td></tr><tr><td><tt class="literal">finder-method</tt></td><td>参见下面的"Basic finder generator"</td></tr><tr><td><tt class="literal">session-method</tt></td><td>参见下面的"Basic finder generator"</td></tr></tbody></table></div><p> 通过<tt class="literal"><meta></tt>标签定义的属性在一个<tt class="literal">hbm.xml</tt>文件中是默认"继承"的。 </p><p> 这究竟是什么意思?如果你希望你所有的类都实现<tt class="literal">IAuditable</tt>接口,那么你只需要加一个<tt class="literal"><meta attribute="implements">IAuditable</meta></tt> 在你<tt class="literal">hml.xml</tt>文件的开头,就在<tt class="literal"><hibernate-mapping></tt>后面。现在所有在<tt class="literal">hbm.xml</tt>文件中定义的类都会实现<tt class="literal">IAuditable</tt>了!(除了那些也特别指定了"implements"元属性的类,因为本地指定的元标签总是会覆盖任何继承的元标签)。 </p><p> 注意,这条规则对<span class="emphasis"><em>所有</em></span> 的<tt class="literal"><meta></tt>标签都有效。也就是说它可以用来指定所有的字段都被声明成protected的,而非默认的private。这可以通过在<tt class="literal"><class></tt>后面<tt class="literal"><meta attribute="scope-field">protected</meta></tt>指定,那么这个类所有的field都会变成protected。 </p><p> 如果你不想让<tt class="literal"><meta></tt>标签继承,你可以简单的在标签属性上指明<tt class="literal">inherit="false"</tt>,比如<tt class="literal"><meta attribute="scope-class" inherit="false">public abstract</meta></tt>,这样"class-scope"就只会对当前类起作用,不会对其子类生效。 </p></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="toolsetguide-s2-3"></a>15.2.3. 基本的finder生成器(Basic finder generator)</h3></div></div><div></div></div><p> 目前可以让<tt class="literal">hbm2java</tt>为Hibernate属性生成基本的finder。这需要在<tt class="literal">hbm.xml</tt>文件中做两件事情。 </p><p> 首先是要标记出你希望生成finder的字段。你可以通过在property标签中的meta 块来定义: </p><pre class="programlisting"><property name="name" column="name" type="string"> <meta attribute="finder-method">findByName</meta></property></pre><p> find方法的名字就是meta标签中间的文字。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -