Когда использовать inverse=false на NHibernate / В спящем режиме отношения OneToMany?

После получения изображения из галереи просто передайте URI описанным ниже способом только для Android 4.4 (KitKat):

public String getPath(Uri contentUri) {// Will return "image:x*"

    String wholeID = DocumentsContract.getDocumentId(contentUri);

    // Split at colon, use second item in the array
    String id = wholeID.split(":")[1];

    String[] column = { MediaStore.Images.Media.DATA };

    // Where id is equal to
    String sel = MediaStore.Images.Media._ID + "=?";

    Cursor cursor = getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel,
            new String[] { id }, null);

    String filePath = "";

    int columnIndex = cursor.getColumnIndex(column[0]);

    if (cursor.moveToFirst()) {
        filePath = cursor.getString(columnIndex);
    }

    cursor.close();
    return filePath;
}

70
задан James Allen 30 June 2009 в 13:15
поделиться

2 ответа

Как говорит Матье, единственный случай, когда вы не хотели бы устанавливать inverse = true, - это когда дочерний элемент не имеет смысла отвечать за само обновление, например, в случае где ребенок ничего не знает о своем родителе.

Давайте попробуем реальный мир, а вовсе не надуманный пример:

<class name="SpyMaster" table="SpyMaster" lazy="true">
  <id name="Id">
    <generator class="identity"/>
  </id>
  <property name="Name"/>
  <set name="Spies" table="Spy" cascade="save-update">
    <key column="SpyMasterId"/>
    <one-to-many class="Spy"/>
  </set>
</class>

<class name="Spy" table="Spy" lazy="true">
  <id name="Id">
    <generator class="identity"/>
  </id>
  <property name="Name"/>
</class>

Шпионы могут иметь шпионов, но шпионы никогда не знают, кто их шпион, потому что мы не включили многие Индивидуальные отношения в классе шпиона. Также (удобно) шпион может превратиться в мошенника, поэтому его не нужно связывать с начальником шпионской сети. Мы можем создавать объекты следующим образом:

var sm = new SpyMaster
{
    Name = "Head of Operation Treadstone"
};
sm.Spies.Add(new Spy
{
    Name = "Bourne",
    //SpyMaster = sm // Can't do this
});
session.Save(sm);

В таком случае вы должны установить для столбца FK значение NULL, потому что процесс сохранения sm будет вставлен в таблицу SpyMaster и таблицу Spy, и только после этого он будет обновлять Spy стол для набора ФК. В таком случае,

82
ответ дан 24 November 2019 в 13:26
поделиться

Если вы хотите иметь однонаправленную ассоциацию, т.е. чтобы дети не могли переходить к Родителю. В этом случае столбец FK должен иметь значение NULLABLE, потому что дочерние элементы будут сохранены раньше родительского.

15
ответ дан 24 November 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: