Eclipseの「テーブルからエンティティを生成...」JPAコードジェネレーターは、ウィザードの手順で指定したスーパークラスで定義されているにもかかわらず、@Idフィールドと関連するゲッター/セッターメソッドの作成を要求します。
これを回避するために、私の考えは、問題のある行を削除し、生成されたファイルを他の方法でクリーンアップするスクリプトを作成することです。(はい、Eclipseの[検索/置換]ダイアログを使用して手動でこれを行うことはできますが、さまざまなモデルで作業しているときにこのコード生成/クリーンアップルーチンを複数回実行するため、変更のセット全体を自動化したいです。)
問題は、awkまたはsedで使用する複数の行を照合するための正しい正規表現パターンが見つからないことです。私が作成する正規表現パターンは、EclipseとTextWranglerの検索ダイアログで機能しますが、awkやsedでは機能しません。
削除したい複数行のテキストは次のとおりです(もちろん、awk / sedへの個別の呼び出しで):
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
private String id;
と
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
上記の引用コードの空でない各行は、ここに貼り付けたときに存在していなくても、\t文字で始まることに注意してください。
例として、ゲッター/セッター行を削除するために、私は試しました
awk '!/\tpublic String getId\(\) \{\r\t\treturn this\.id;\r\t\}\r\r\tpublic void setId\(String id\) \{\r\t\tthis\.id = id;\r\t\}\r/' $file > temp.txt && mv temp.txt $file
または短縮版
awk '!/^\tpublic String getId.*\r.*\r.*\r\r.*\r.*\r.*\r\r/' ...
しかし、どちらも機能しません。
(どちらのパターンもEclipseまたはTextWranglerで機能して、削除する行を見つけます。)
たとえば、1行の削除しか取得できません
awk '!/^\tpublic String getId.*\r/' ...
ただし、「\ t} \ r」を削除すると、メソッド終了およびクラス終了の中括弧がすべて削除されるため、これは役に立ちません。
違いがあれば、OSX10.8.2を実行しているMacでこれを行っています。
ありがとう。