2016-07-28 18 views
-1

Hallo ich bin ein frischer Ich habe gerade i Anwendung von Online wurde versucht, es zu laufen Parameter ich verwende istZeile löschen aus MySql Tabelle mit Hibernate

Maven SpringMVC Mysql Java Eclipse-

i Ich bin in der Lage, eine Tabelle in der Datenbank mit diesem Code zu erstellen und delet auch, aber wenn ich versuche, es zu erkennen ohne Speichern Option gibt es Fehler **** org.hibernate.event.def.DefaultDeleteEventListener deleteTransientEntity INFO: Handhabung Transient Entity in der Löschverarbeitung **** Wenn ich online überprüft habe, zeige ich, um das Objekt der Zeile in der app.java Seite zu bekommen, dann lösche das Objekt, um die Zeile zu löschen, ich weiß nicht, wie man das Objekt bekommt und wie man die Zeile der Datenbank in diesem Objekt übergibt (wie man das Feld mBedded in das Objekt zu erhalten und wie das Objekt zu erhalten) plz helfen alles, was ich will, ist eine Zeile aus der Datenbank Basis auf einige Spaltennamen bestimmten Wert

App.java Klasse

package com.mkyong.common; 
import org.hibernate.Session; 
import com.mkyong.persistence.HibernateUtil; 

public class App 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Maven + Hibernate + MySQL"); 
     Session session = HibernateUtil.getSessionFactory().openSession(); 

     session.beginTransaction(); 
     Stock stock = new Stock(); 

     stock.setStockCode("4715"); 
     stock.setStockName("GENM"); 

     stock.getStockCode(); 
     stock.getStockName(); 

     //session.save(stock); 

     session.delete(stock); 

     session.getTransaction().commit(); 


    } 
} 
löschen

AppTest.java

package com.mkyong.common; 

import junit.framework.Test; 
import junit.framework.TestCase; 
import junit.framework.TestSuite; 

/** 
* Unit test for simple App. 
*/ 
public class AppTest 
    extends TestCase 
{ 
    /** 
    * Create the test case 
    * 
    * @param testName name of the test case 
    */ 
    public AppTest(String testName) 
    { 
     super(testName); 
    } 

    /** 
    * @return the suite of tests being tested 
    */ 

public static Test suite() 
{ 
    return new TestSuite(AppTest.class); 
} 

/** 
* Rigourous Test :-) 
*/ 
public void testApp() 
{ 
    assertTrue(true); 
} 

}

Stock.java

package com.mkyong.common; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import static javax.persistence.GenerationType.IDENTITY; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.persistence.UniqueConstraint; 

@Entity 
@Table(name = "stock", catalog = "gagan", 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; 

    public Stock() { 
    } 

    public Stock(String stockCode, String stockName) { 
     this.stockCode = stockCode; 
     this.stockName = stockName; 
    } 

    @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; 
    } 

} 

HibernateUtil.java 



    package com.mkyong.persistence; 

    import org.hibernate.SessionFactory; 
    import org.hibernate.cfg.AnnotationConfiguration; 

    public class HibernateUtil { 

     private static final SessionFactory sessionFactory = buildSessionFactory(); 

     private static SessionFactory buildSessionFactory() { 
      try { 
       // Create the SessionFactory from hibernate.cfg.xml 
       return new AnnotationConfiguration().configure().buildSessionFactory(); 

      } 
      catch (Throwable ex) { 
       // Make sure you log the exception, as it might be swallowed 
       System.err.println("Initial SessionFactory creation failed." + ex); 
       throw new ExceptionInInitializerError(ex); 
      } 
     } 

     public static SessionFactory getSessionFactory() { 
      return sessionFactory; 
     } 

     public static void shutdown() { 
      // Close caches and connection pools 
      getSessionFactory().close(); 
     } 

    } 

hibernatecfg.xml

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <!-- Database connection settings --> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <!-- Database connection settings --> 

    <!-- UAT Database connection settings --> 
    <property name="connection.url">jdbc:mysql://localhost:3306/gagan</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password">123456</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="show_sql">true</property> 
     <property name="hibernate.hbm2ddl.auto">update</property> 
     <!-- Think Before made any change in below flag may that clean you complete database --> 
     <mapping class="com.mkyong.common.Stock"></mapping> 
    </session-factory> 
</hibernate-configuration> 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
     <modelVersion>4.0.0</modelVersion> 
     <groupId>com.mkyong.common</groupId> 
     <artifactId>HibernateExample</artifactId> 
     <packaging>jar</packaging> 
     <version>1.0-SNAPSHOT</version> 
     <name>HibernateExample</name> 
     <url>http://maven.apache.org</url> 

     <repositories> 
     <repository> 
      <id>JBoss repository</id> 
      <url>http://repository.jboss.com/maven2/</url> 
     </repository> 
     </repositories> 



     <dependencies> 


     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- MySQL database driver --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.9</version> 
     </dependency> 

     <!-- Hibernate core --> 
     <dependency> 
      <groupId>hibernate</groupId> 
      <artifactId>hibernate3</artifactId> 
      <version>3.2.3.GA</version> 
     </dependency> 

     <!-- Hibernate annotation --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.3.5.Final</version> 
     </dependency> 
     <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>4.3.5.Final</version> 
     </dependency> 
     <!-- Hibernate library dependecy start --> 
     <dependency> 
      <groupId>dom4j</groupId> 
      <artifactId>dom4j</artifactId> 
      <version>1.6.1</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-collections</groupId> 
      <artifactId>commons-collections</artifactId> 
      <version>3.2.1</version> 
     </dependency> 


     <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib</artifactId> 
      <version>2.2</version> 
     </dependency> 
     <!-- Hibernate library dependecy end --> 

     </dependencies> 
    </project> 

[1]: http://i.stack.imgur.com/tkv2h.png 

Antwort

0

Sie können nicht löschen vorübergehendes Objekt. Sie müssen zuerst das Objekt mit der Datenbank synchronisieren. Zum Beispiel haben Sie ID Ihrer Bestandskomponente. Hier ist ein Beispiel Code, um das Objekt basierend auf StockId zu löschen. Auch wenn Sie ein Objekt mit Hibernate erstellen, geben Sie ID zurück. Verwenden Sie diese ID, um die Zeile aus der Datenbank zu löschen.

Session session = HibernateUtil.getSessionFactory().openSession(); 
    try { 
     session.beginTransaction(); 
     Serializable id = stockId; 
     Object persistentInstance = session.load(Stock.class, id); 
     if (persistentInstance != null) { 
      session.delete(persistentInstance); 
      session.getTransaction().commit(); 
      System.out.println ("Deleted Sucessfully"); 

     } 
     else { 
      System.out.println ("Did not find the Stock Object in persistance"); 

     } 

    } 
    catch (HibernateException e) { 
     e.printStackTrace(); 

    } 

    finally { 
     if(session!=null){ 
      session.close(); 
     } 
    } 
0

Auf Objekt im eingeschwungenen Zustand ist, um es zu löschen, sollte es in der Datenbank auch anhalten sein beachten Sie, dass, wenn Sie versuchen, eine beliebige Taste Objekt seine primäre löschen sollte es Änderungen in reflektieren nicht mit ihm anders eingestellt werden Die Datenbank als STOCK_ID ist hier Primärschlüssel.