1

以下の装飾と条件で、

/**
 * passsalt.
 */
@JoinColumn(name = "PASSSALT_ID", nullable = false)
@OneToOne(cascade = {CascadeType.PERSIST,
                     CascadeType.MERGE, // is this actually required?
                     CascadeType.REMOVE},
          optional = false, orphanRemoval = true)
@NotNull
@XmlTransient
private Morton passsalt;
  • passsaltこのエンティティと一緒にアクセスする必要があります。( CascadeType.PERSIST)
  • passsaltdetached新しいインスタンスに置き換えることができます。( CascadeType.MERGE?)
  • passsaltこのエンティティが削除されたときに削除する必要があります。( CascadeType.REMOVE)
  • Morton更新するフィールドがありません

質問:CascadeType.MERGE必須ですか?

ありとなしでテストしましたが、なしCascadeType.MERGEでも機能するようです。

Q2: 質問タイトルの「Is」は正しいですか?それは「する」べきですか?

交換方法をご紹介しpasssaltます。

public boolean nassword(final Shadow reference, final byte[] password,
                        final byte[] nassword) {

    passsalt = new Morton();
    passcode = passsalt.salty(nassword);

    return true;
}

以下の方法でテストしました。

@Test(enabled = true, invocationCount = 1)
public void testNassword0() {
    final EntityManager manager = LocalPU.createEntityManager();
    try {
        final EntityTransaction transaction = manager.getTransaction();
        transaction.begin();
        try {
            final String username = newUsername(manager);
            final byte[] password = newPassword();
            Shadow shadow = persistInstance(manager, username, password);
            Assert.assertTrue(shadow.puthenticate(shadow, password));
            System.out.println("=========================================");
            LOGGER.log(Level.INFO, "mortons: {0}",
                       MORTONS(manager, 0, 1024));
            final byte[] nassword = newPassword();
            shadow.nassword(shadow, password, nassword);
            shadow = manager.merge(shadow);
            manager.flush();
            System.out.println("=========================================");
            LOGGER.log(Level.INFO, "mortons: {0}",
                       MORTONS(manager, 0, 1024));
            Assert.assertFalse(shadow.puthenticate(shadow, password));
            Assert.assertTrue(shadow.puthenticate(shadow, nassword));
            transaction.commit();
        } catch (Exception e) {
            transaction.rollback();
            e.printStackTrace(System.err);
            Assert.fail(e.getMessage());
        }
    } finally {
        manager.close();
    }
}

これが出力です。

4월 02, 2013 11:55:03 오전 org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 4.3.0.Final
[EL Info]: 2013-04-02 11:55:03.897--ServerSession(571229670)--EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461
[EL Info]: 2013-04-02 11:55:04.744--ServerSession(571229670)--file:/E:/svnwc/jinahya.googlecode.com/trunk/com.googlecode.jinahya/jinahya-ee/target/test-classes/_localPU login successful
4월 02, 2013 11:55:06 오전 com.googlecode.jinahya.persistence.Morton _PrePersist
INFO: _PrePersist(): Morton@1760972179&id=1048576
4월 02, 2013 11:55:06 오전 com.googlecode.jinahya.persistence.Shadow puthenticate
INFO: puthenticate(Shadow@1311874806?id=1048576&username=0KIWHFirmA581Qf5AscsrVbN9YW30pAF&passcode=[B@57d01cc, [B@5200fae4)
4월 02, 2013 11:55:06 오전 com.googlecode.jinahya.persistence.Shadow puthenticate
INFO: passsalt: Morton@1760972179&id=1048576
=========================================
4월 02, 2013 11:55:08 오전 com.googlecode.jinahya.persistence.ShadowTest testNassword0
INFO: mortons: [Morton@1760972179&id=1048576]
4월 02, 2013 11:55:08 오전 com.googlecode.jinahya.persistence.Shadow nassword
INFO: nassword(Shadow@1311874806?id=1048576&username=0KIWHFirmA581Qf5AscsrVbN9YW30pAF&passcode=[B@57d01cc, [B@5200fae4, [B@1b6ac76b)
4월 02, 2013 11:55:08 오전 com.googlecode.jinahya.persistence.Shadow puthenticate
INFO: puthenticate(Shadow@1311874806?id=1048576&username=0KIWHFirmA581Qf5AscsrVbN9YW30pAF&passcode=[B@57d01cc, [B@5200fae4)
4월 02, 2013 11:55:08 오전 com.googlecode.jinahya.persistence.Shadow puthenticate
INFO: passsalt: Morton@1760972179&id=1048576
4월 02, 2013 11:55:11 오전 com.googlecode.jinahya.persistence.Morton _PrePersist
INFO: _PrePersist(): Morton@93935309&id=1048577
=========================================
4월 02, 2013 11:55:11 오전 com.googlecode.jinahya.persistence.ShadowTest testNassword0
INFO: mortons: [Morton@93935309&id=1048577]
4월 02, 2013 11:55:11 오전 com.googlecode.jinahya.persistence.Shadow puthenticate
INFO: puthenticate(Shadow@1311874806?id=1048576&username=0KIWHFirmA581Qf5AscsrVbN9YW30pAF&passcode=[B@641e8314, [B@5200fae4)
4월 02, 2013 11:55:11 오전 com.googlecode.jinahya.persistence.Shadow puthenticate
INFO: passsalt: Morton@93935309&id=1048577
4월 02, 2013 11:55:12 오전 com.googlecode.jinahya.persistence.Shadow puthenticate
INFO: puthenticate(Shadow@1311874806?id=1048576&username=0KIWHFirmA581Qf5AscsrVbN9YW30pAF&passcode=[B@641e8314, [B@1b6ac76b)
4월 02, 2013 11:55:12 오전 com.googlecode.jinahya.persistence.Shadow puthenticate
INFO: passsalt: Morton@93935309&id=1048577

要約すれば、

After persisted ->           mortons: [Morton@1760972179&id=1048576]
After replaced and merged -> mortons: [Morton@93935309&id=1048577]
4

1 に答える 1