質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.45%

  • Java

    16197questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Spring

    879questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • Thymeleaf

    199questions

    Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

エラー いかなる結果も、クエリによって返されませんでした。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,608

Yoshi--

score 50

Favorite.java

package com.example.konkatsu.domain;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "favorite")

public class Favorite {

    @EmbeddedId  //複合キー
    @Column(name = "user_id")
    private Integer userId;

    @Column(name = "favorite_user_id")
    private Integer favoriteUserId;

    //FavoriteとUserをjoin
    //cascadeはDB操作を実行する方に設定
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(nullable = true, name = "user_id")
    private User user;

}

FavoriteRepository.java

package com.example.konkatsu.repository;

import javax.transaction.Transactional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import com.example.konkatsu.domain.Favorite;

@Repository
public interface FavoriteRepository extends JpaRepository<Favorite, Integer>{



    //お気に入りに追加
    @Modifying //メソッドがUPDATE文であることを明示
    @Transactional
    @Query(value = "INSERT INTO FAVORITE (USER_ID,FAVORITE_USER_ID) VALUES (?1, ?2)", nativeQuery = true)
    void createFavorite(Integer userId, Integer favoriteUserId);


    //お気に入りを解除
    @Query(value = "DELETE FROM FAVORITE WHERE USER_ID = ?1 AND FAVORITE_USER_ID = ?2", nativeQuery = true)
    void deleteFavorite(Integer userId, Integer favoriteUserId);

}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<title>婚活サイト</title>
<link rel="stylesheet"
    href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
    th:href="@{/webjars/bootstrap/3.3.7/css/bootstrap.min.css}" />
<link rel="stylesheet"
    href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
    th:href="@{/webjars/bootstrap/3.3.7/css/bootstrap-theme.min.css}" />
</head>

<body th:with="user=${#authentication.principal.user}">
    <!-- authenticationで認証ユーザー情報にアクセスできる 、principalプロパティでUserDetailsオブジェクトにアクセスできるので、user.mailでログインユーザー名が分かる-->

    <h2>
        <span th:text="${user.mail}">メアド</span> さん、ログイン中
    </h2>


    <table class="table table-striped table-bordered table-condensed">
        <h2>登録ユーザー 一覧</h2>
        <tr>
            <th>写真</th>
            <th>名前</th>
            <th>性別</th>
            <th>誕生日</th>
            <th>身長(cm)</th>
            <th>職業</th>
            <th>年収(万円)</th>
            <th>メールアドレス</th>
            <th>自己紹介</th>
        </tr>

        <tr th:each="profile : ${profiles}">
            <!-- エンコードした画像の表示 -->
            <td><img th:src="${'data:image/png;base64,' + profile.image}"
                width="250" height="150" /></td>
            <td th:text="${profile.name}">山田</td>
            <td th:text="${profile.gender}"></td>
            <td th:text="${profile.birthday}">誕生日</td>
            <td th:text="${profile.height}">170</td>
            <td th:text="${profile.occupationName}">職業</td>
            <td th:text="${profile.income}">年収</td>
            <td th:text="${profile.mail}">メール</td>
            <!-- 「profile」オブジェクトがもつ「user」の「mail」を表示 -->
            <td th:text="${profile.text}">自己紹介</td>
            <td>
                <form th:action="@{/konkatsu/createFavorite}" method="post">
                    <input type="hidden" name="userId" th:value="${user.userId}" /> <input
                        type="hidden" name="favoriteUserId" th:value="${profile.id}" />
                    <button type="submit"></button>
                    (お気に入りにする)
                </form>
            </td>
            <td>
                <form th:action="@{/konkatsu/deleteFavorite}" method="post">
                    <input type="hidden" name="userId" th:value="${user.userId}" /> <input
                        type="hidden" name="favoriteUserId" th:value="${profile.id}" />
                    <button type="submit">×</button>
                    (お気に入りをやめる)
                </form>
            </td>
        </tr>
    </table>

    <div th:fragment='paginationbar'>
        <ul>
            <li th:class="${page.first} ? 'disabled':''" style="display: inline">
                <span th:if="${page.first}">←先頭</span> <a th:if="${not page.first}"
                th:href="@{${url}(searchName=${param.searchName},genderId=${param.genderId}, page=0)}">←先頭</a>
            </li>

            <!-- #numbers.sequenceは引数に指定した2つの数値の範囲で配列を生成 -->
            <li th:each='i : ${#numbers.sequence(0, page.totalPages-1)}'
                th:class="(${i}==${page.number})? 'active' : ''"
                style="display: inline"><span th:if='${i}==${page.number}'
                th:text='${i+1}'>1</span> <a th:if='${i}!=${page.number}'
                th:href="@{${url} (searchName=${param.searchName}, genderId=${param.genderId}, page=${i})}">
                    <span th:text='${i+1}'>1</span>
            </a></li>
            <li th:class="${page.last} ? 'disabled':''" style="display: inline">
                <span th:if="${page.last}">末尾➝</span> <a th:if="${not page.last}"
                th:href="@{${url}(searchName=${param.searchName}, genderId=${param.genderId}, page=(${page.totalPages}-1))}">末尾➝</a>
            </li>
        </ul>
    </div>

    <form th:action="@{/konkatsu/myProfile}" method="get">
        <input type="hidden" name="id" th:value="${user.userId}" />
        <button type="submit" class="btn btn-lg btn-primary btn-block">Myページへ</button>
    </form>

</body>
</html>

お気に入りを解除しようとすると

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Aug 01 14:17:54 JST 2017
There was an unexpected error (type=Internal Server Error, status=500).
could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet


が画面上に

コンソール上に

いかなる結果も、クエリによって返されませんでした。

と出ます。
ちなみにDBを見ると
ちゃんと削除されています

どこがおかしいのでしょうか??

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

@Modifying
@Transactionalをつけることで自己解決しました

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    16197questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Spring

    879questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • Thymeleaf

    199questions

    Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。