Ruhezustand - Eins-zu-Eins-Beispiel (Anmerkung)
In diesem Lernprogramm wird die gesamte Infrastruktur des vorherigen "http://www.example.com/hibernate/hibernate-one-to-one-relationship-example/[Hibernate one to one Relationship Example - XML Mapping]" wiederverwendet. Tutorial, erweitern Sie es, um Hibernate / JPA-Annotation zu unterstützen.
Projektstruktur
Siehe die endgültige Projektstruktur dieses Tutorials.
Note
Seit Hibernate 3.6 werden Anmerkungscodes in das Hibernate-Kernmodul zusammengeführt, sodass die Datei“previous pom.xml wiederverwendet werden kann.
1. Eins-zu-eins-Tabellenbeziehung
Siehe die vorherige Eins-zu-Eins-Tabellenbeziehung erneut.
2. Hibernate Model Class
Erstellen Sie zwei Modellklassen -Stock.java
undStockDetail.java
, und fügen Sie den Anmerkungscode ein.
Datei: Stock.java
package com.example.stock; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.UniqueConstraint; @Entity @Table(name = "stock", catalog = "exampledb", uniqueConstraints = { @UniqueConstraint(columnNames = "STOCK_NAME"), @UniqueConstraint(columnNames = "STOCK_CODE") }) public class Stock implements java.io.Serializable { private Integer stockId; private String stockCode; private String stockName; private StockDetail stockDetail; public Stock() { } public Stock(String stockCode, String stockName) { this.stockCode = stockCode; this.stockName = stockName; } public Stock(String stockCode, String stockName, StockDetail stockDetail) { this.stockCode = stockCode; this.stockName = stockName; this.stockDetail = stockDetail; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "STOCK_ID", unique = true, nullable = false) public Integer getStockId() { return this.stockId; } public void setStockId(Integer stockId) { this.stockId = stockId; } @Column(name = "STOCK_CODE", unique = true, nullable = false, length = 10) public String getStockCode() { return this.stockCode; } public void setStockCode(String stockCode) { this.stockCode = stockCode; } @Column(name = "STOCK_NAME", unique = true, nullable = false, length = 20) public String getStockName() { return this.stockName; } public void setStockName(String stockName) { this.stockName = stockName; } @OneToOne(fetch = FetchType.LAZY, mappedBy = "stock", cascade = CascadeType.ALL) public StockDetail getStockDetail() { return this.stockDetail; } public void setStockDetail(StockDetail stockDetail) { this.stockDetail = stockDetail; } }
Datei: StockDetail.java
package com.example.stock; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter; @Entity @Table(name = "stock_detail", catalog = "exampledb") public class StockDetail implements java.io.Serializable { private Integer stockId; private Stock stock; private String compName; private String compDesc; private String remark; private Date listedDate; public StockDetail() { } public StockDetail(Stock stock, String compName, String compDesc, String remark, Date listedDate) { this.stock = stock; this.compName = compName; this.compDesc = compDesc; this.remark = remark; this.listedDate = listedDate; } @GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "stock")) @Id @GeneratedValue(generator = "generator") @Column(name = "STOCK_ID", unique = true, nullable = false) public Integer getStockId() { return this.stockId; } public void setStockId(Integer stockId) { this.stockId = stockId; } @OneToOne(fetch = FetchType.LAZY) @PrimaryKeyJoinColumn public Stock getStock() { return this.stock; } public void setStock(Stock stock) { this.stock = stock; } @Column(name = "COMP_NAME", nullable = false, length = 100) public String getCompName() { return this.compName; } public void setCompName(String compName) { this.compName = compName; } @Column(name = "COMP_DESC", nullable = false) public String getCompDesc() { return this.compDesc; } public void setCompDesc(String compDesc) { this.compDesc = compDesc; } @Column(name = "REMARK", nullable = false) public String getRemark() { return this.remark; } public void setRemark(String remark) { this.remark = remark; } @Temporal(TemporalType.DATE) @Column(name = "LISTED_DATE", nullable = false, length = 10) public Date getListedDate() { return this.listedDate; } public void setListedDate(Date listedDate) { this.listedDate = listedDate; } }
3. Ruhezustand-Konfigurationsdatei
Fügt kommentierte KlassenStock.java
undStockDetail.java
in Ihre Hibernate-Konfigurationsdatei sowie MySQL-Verbindungsdetails ein.
Datei: hibernate.cfg.xml
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/exampledb root password org.hibernate.dialect.MySQLDialect true
4. Starte es
Wenn Sie es ausführen, fügt Hibernate eine Zeile in die Tabelle STOCK und eine Zeile in die Tabelle STOCK_DETAIL ein.
Datei: App.java
package com.example; import java.util.Date; import org.hibernate.Session; import com.example.stock.Stock; import com.example.stock.StockDetail; import com.example.util.HibernateUtil; public class App { public static void main(String[] args) { System.out.println("Hibernate one to one (Annotation)"); Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); Stock stock = new Stock(); stock.setStockCode("7052"); stock.setStockName("PADINI"); StockDetail stockDetail = new StockDetail(); stockDetail.setCompName("PADINI Holding Malaysia"); stockDetail.setCompDesc("one stop shopping"); stockDetail.setRemark("vinci vinci"); stockDetail.setListedDate(new Date()); stock.setStockDetail(stockDetail); stockDetail.setStock(stock); session.save(stock); session.getTransaction().commit(); System.out.println("Done"); } }
Ausgabe
Hibernate one to one (Annotation) Hibernate: insert into exampledb.stock (STOCK_CODE, STOCK_NAME) values (?, ?) Hibernate: insert into exampledb.stock_detail (COMP_DESC, COMP_NAME, LISTED_DATE, REMARK, STOCK_ID) values (?, ?, ?, ?, ?) Done
Laden Sie es herunter -Hibernate-one-to-one-annotation,zip (9KB)