hibernate manytoone beziehung und fremdschlüssel als primary schlüssel

Status
Nicht offen für weitere Antworten.

k_ocel

Mitglied
hallo,
ich möchte gern eine hibernate mapping bauen! und zwar folgende tabellen!

tab1
-tab1_id pk auto_inc
-feld1
-feld2

tab2
-tab1_id pk fk
-feld1


tab1 hat tab1_id als primary key.
tab1_id ist auch in tab2 tabelle als fremdschlüssel deklariert aber gleich primaykey!
man kann mehrere in tab1 tabelle datensatz erstellen! aber muss nicht für jede datensatz auch in tab2 speichern!

also nicht onetoone beziehung sondern manytoone!


mapping
tab1
Java:
@Entity
@Table(name = "tab1")
@Inheritance(strategy = InheritanceType.JOINED)
public class Tab1 implements java.io.Serializable {
	
	@Id
	@GeneratedValue
	@Column(name = "tab1_id")
	private Integer id;
.
.
.
tab2
Java:
@Entity
@Table(name = "tab2")
public class Tab2{

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "tab1_id")
    private Tab1 tab1;	
.
.
.


ALSO: wenn so eine mapping erstelle für zwiete tabelle sagt er in column lst gib es keine tab1.
eigenlich sollte er tab1_id in column list nehmen!
hibernate: insert into tab1(tab1,feld1)....
wie kann ich anstatt tab1 tab1_id bekannt machen?
 
Zuletzt bearbeitet:
Hi,

was mir zuerst einmal auffällt, dass Du den Tabellen eine PK geben solltest der immer "Id" heißt....macht das Leben einfacher (dann reicht ein @Id ohne ColumnName...). (Eventuell auch ein Long anstatt ein Integer)..

weiterhin solltest Du nicht den technischen Schlüssel einer Tabelle mit dem FK vermischen....

also sollte die Tab2
Code:
tab2
-Id PK
-fk_tab1 fk
-feld1
aussehen...
Java:
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "fk_tab1")
    private Tab1 tab1;

MfG
Karl Heinz Marbaise
 
danke aber habe das problem gelöst!
tab2
Java:
@Entity
@Table(name = "Voucher_Customer", catalog = "UVS_MMOG_HEAD_DATA")
public class VoucherCustomer{

	@Id
	@GeneratedValue(generator = "fk_Voucher_ID_Voucher")
	@GenericGenerator(name = "fk_Voucher_ID_Voucher", strategy = "foreign", parameters = {@Parameter(name = "property", value = "voucher")})
	@Column(name = "ID_Voucher")
	private Integer idVoucher;
	
    @OneToOne(targetEntity = Voucher.class)
    @JoinColumn(name = "ID_Voucher")
    private Voucher voucher;
tab1
Java:
@Entity
@Table(name = "Voucher", catalog = "UVS_MMOG_HEAD_DATA")
@Inheritance(strategy = InheritanceType.JOINED)
public class Voucher implements java.io.Serializable {
	
	@Id
	@GeneratedValue
	@Column(name = "ID_Voucher")
	private Integer id;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "Start_Date")
    private Date startDate;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "End_Date")
    private Date endDate;
    
    @Column(name = "Redeemed")
    private boolean redeemed;

    @Column(name = "Voucher_Code")
    private String voucherCode;

    @Enumerated(EnumType.STRING)
    @Column(name = "Voucher_Type")
    private EnumVoucherType voucherType;
    
    @OneToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL, mappedBy = "voucher")
    @PrimaryKeyJoinColumn(name = "idVoucher")
    private VoucherCustomer voucherCustomer;

zum testen
Java:
Voucher cash = new Voucher();
cash.setVoucherCode("xy");
.
.
.
.

			VoucherCustomer vc = new VoucherCustomer();
			vc.setCustomer(customer);
			vc.setVoucher(cash);
			cash.setVoucherCustomer(vc);
			
			manager.persist(cash);
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben