[...]

... což mě přivádí k jednomu dotazu. A to, zda je dobře ty entitní třídy 
upravovat a doplňovat o další funkcionalitu, tím se ztratí možnost je pak 
snadno přegenerovat. Napadlo mě udělat potomka a rozšiřovat jej, ale nevím, jak 
to pak bude fungovat, všude se píše, že potomci se dělají v případě, že chci 
mít podentitu, tedy že to ve výsledku bude ve dvou tabulkách s vazbou 1:1, což 
ale nechci. Jak se to tedy správně dělá?

[...]

Zkuste se podivat na anotaci @MappedSuperclass. Rekl bych, ze to dela presne to, co chcete. Entitou jako takovou bude pouze oddedena trida, ale podedi vsechny sloupecky a nastaveni rodicovske tridy.

Priklad:

/* generovana trida */
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Foo {

  private int id;
  private String field;

  @Id @GeneratedValue(strategy = GenerationType.TABLE)
  @Column(name = "ID", nullable = false)
  public int getId() { return id; }
  public void setId(int id) { this.id = id; }

  @Column(name = "FIELD", nullable = false, length = 50, unique = true)
  public String getField() { return field; }
  public void setField(String field) { this.field = field; }
}

/* trida generovana pouze jednou */
@Entity
@Table(name="FOO")
public class FooImpl extends Foo {}

---
Radim Tlusty
Eurosoftware s.r.o

Odpovedet emailem