我有webapp,它使用Hibernate 4
,Spring 3
和MySQL
。 Hibernate會話和事務由spring進行管理。saveOrUpdate帶有Hibernate + MySQL的多對多表格
現在我感到困惑的是如何將數據插入使用Hibernate computer_app
表。 這裏的腳本創建數據庫:
CREATE TABLE computers (
computer_id INT AUTO_INCREMENT,
computer_name VARCHAR(15) NOT NULL,
ip_address VARCHAR(15) NOT NULL UNIQUE,
login VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL,
PRIMARY KEY(computer_id)
) ENGINE=InnoDB;
CREATE TABLE applications (
app_id INT AUTO_INCREMENT,
app_name VARCHAR(255) NOT NULL,
vendor_name VARCHAR(255) NOT NULL,
license_required TINYINT(1) NOT NULL,
PRIMARY KEY(app_id)
) ENGINE=InnoDB;
CREATE TABLE computer_app (
computer_id INT,
app_id INT,
FOREIGN KEY (computer_id)
REFERENCES computers(computer_id)
ON DELETE CASCADE,
FOREIGN KEY (app_id)
REFERENCES applications(app_id)
ON DELETE CASCADE
) ENGINE = InnoDB;
而且這裏有2對應的類,這是由NetBeans
爲computer_app
表中生成:
ComputerApp.java:
@Entity
@Table(name="computer_app" ,catalog="adminportal")
public class ComputerApp implements Serializable {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name="computerId", [email protected](name="computer_id")),
@AttributeOverride(name="appId", [email protected](name="app_id")) })
private ComputerAppId id;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="app_id", insertable=false, updatable=false)
private Application applications;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="computer_id", insertable=false, updatable=false)
private Computer computers;
public ComputerApp() {
}
public ComputerApp(Application applications, Computer computers) {
this.applications = applications;
this.computers = computers;
}
public ComputerAppId getId() {
return id;
}
public void setId(ComputerAppId id) {
this.id = id;
}
public Application getApplications() {
return applications;
}
public void setApplications(Application applications) {
this.applications = applications;
}
public Computer getComputers() {
return computers;
}
public void setComputers(Computer computer) {
this.computers = computer;
}
@Override
public String toString() {
return applications.getAppName();
}
}
ComputerAppId。 Java的:
@Embeddable
public class ComputerAppId implements Serializable {
@Column(name = "computer_id")
private Integer computerId;
@Column(name = "app_id")
private Integer appId;
public ComputerAppId(){
}
public ComputerAppId(Integer computerId, Integer appId) {
this.computerId = computerId;
this.appId = appId;
}
public Integer getComputerId() {
return this.computerId;
}
public void setComputerId(Integer computerId) {
this.computerId = computerId;
}
public Integer getAppId() {
return this.appId;
}
public void setAppId(Integer appId) {
this.appId = appId;
}
public boolean equals(Object other) {
if ((this == other)) {
return true;
}
if ((other == null)) {
return false;
}
if (!(other instanceof ComputerAppId)) {
return false;
}
ComputerAppId castOther = (ComputerAppId) other;
return ((this.getComputerId() == castOther.getComputerId()) || (this.getComputerId() != null && castOther.getComputerId() != null && this.getComputerId().equals(castOther.getComputerId())))
&& ((this.getAppId() == castOther.getAppId()) || (this.getAppId() != null && castOther.getAppId() != null && this.getAppId().equals(castOther.getAppId())));
}
public int hashCode() {
int result = 17;
result = 37 * result + (getComputerId() == null ? 0 : this.getComputerId().hashCode());
result = 37 * result + (getAppId() == null ? 0 : this.getAppId().hashCode());
return result;
}
}
我該如何才能saveOrUpdate()
computer_app
數據與Hibernate數據?必須創建2個生成類的哪個實例 - 其中一個還是兩個?
請點我的解決方案或者提供一些code..I真的需要,使這個到明天!每一個答案都是高度讚賞和迴應immidiately!如果你需要一些額外的代碼 - 只是讓我知道。
謝謝。
但是ComputerAppId呢?我還必須提供它嗎?或者它將以某種方式從ComputerApp生成? – amenoire
在我看來,它將在數據庫表中保持爲空,如果它沒有在運行時設置的話。您可以使用@GeneratedValue(strategy = GenerationType.IDENTITY)生成一個自動遞增的ID,但它不適用於Objects。 – Janus
在ComputerApp類中是否存在缺少註釋? – Janus