无法从hibernate中的映射表中删除数据

时间:2015-08-08 08:47:20

标签: java hibernate orm delete-row

我有2个实体One是Header而另一个是Items

标题有很多项目

标题代码如下

@Entity
public class Headertable {

  @Id
  @GeneratedValue
  private int headerId;

  private String headerText;

  @OneToMany(mappedBy="itemId.header",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
  private List<Items> items = new ArrayList<Items>();
  ...
  getter and setters for these

和项目表如下

@Entity
public class Items {

  @EmbeddedId
  private ItemId itemId;

  private String itemData;
  .... getter and setters for these

项目表ID类

@Embeddable
public class ItemId implements Serializable{

  @ManyToOne
  private Headertable header;

  private int itemId;
  ...setter and getters

以下是从标题中删除一个项目的测试代码,如下所示

Session session = this.sessionFactory.openSession();
    session.beginTransaction();
    Headertable header = (Headertable) session.get(Headertable.class, 1);

    Iterator<Items> iterator = header.getItems().iterator();
    while( iterator.hasNext() )
    {
      Items items = iterator.next();
      if( items.getItemData().equals("chiru"))
      {
        iterator.remove();
      }
    }
    session.saveOrUpdate(header);
    Transaction transaction = session.getTransaction();
    transaction.commit();

1 个答案:

答案 0 :(得分:0)

您必须删除该项目:

package com.jsm.irs; import android.support.v7.app.ActionBarActivity; import android.telephony.SmsManager; import android.util.Log; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.preference.PreferenceManager; import com.jsm.irs.SharedPreference; import android.view.Menu; import android.view.inputmethod.InputMethodManager; public class SecondActivity extends Activity { // UI References private TextView textTxt; private String text; private SharedPreference sharedPreference; Activity context = this; Button btnCall; EditText txtDated; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sharedPreference = new SharedPreference(); btnCall = (Button)findViewById(R.id.btnCal); txtDated = (EditText) findViewById(R.id.txtDate); findViewsById(); //Retrieve a value from SharedPreference text = sharedPreference.getValue(context); textTxt.setText(text); } private void findViewsById() { textTxt = (TextView) findViewById(R.id.textView1); btnCall.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { sendSMSMessage(); } }); } protected void sendSMSMessage() { Log.i("Send SMS", ""); String phoneNo = textTxt.getText().toString(); String message = txtDated.getText().toString(); try { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNo, null, message, null, null); Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getApplicationContext(), "SMS faild, please try again.", Toast.LENGTH_LONG).show(); e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }

如果未使用session.delete(items);,则从反面删除引用对保存的数据没有影响。