EclipseLink JPA『is mapped to a primary key column in the database. Updates are not allowed.』

JPAの開発で『is mapped to a primary key column in the database. Updates are not allowed.』というエラーが出る場合、おそらく原因はいろいろあるのだろうけど、自己解決したのでメモ。

既に存在しているレコードに対して、EntityManager.find で atache したのちプライマリキーを上書きした状態で、merge / flush を行うとなるようです。

find して存在するレコードに更新かける場合はプライマリキーを書き換えないようにしましょう。

2016/4/26追記:

上記記載内容でも解決できずまだエラーログが掃かれていたので調査した結果を記載。EntityManagerを使いまわしでいろんなEntityを入れてmerge/flushしてました。emTransaction.commit / rollback 後は使用しなくなったEntitiyはキャッシュクリアを明示的にしないとずっと保持し続けるようで、これが悪さをしていました。

処理が遅くなるけど、 1テーブル処理が終わったらcommit/rollbackと同時に毎回em.clear();するようにしたらタイトルのエラーが出なくなりました。

またEntityのキャッシュについては、アノテーションによるキャッシュとpersistence.xmlによる設定ができるようです。前者の方がEntity毎に管理できるのでよさそうですね。

キャッシュいついての記事。

 

PHPでIE8,9,10,11のユーザエージェントからバージョンを取得する

IEのユーザエージェントがIE8,9,10,11とそれぞれ変わってきているようで、数年前のサンプルコードではIEブラウザバージョンの判定がPHPでできなかったため、作成してみました。


function getIeUaVer(){
// UserAgetn を小文字に統一
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
// IE の場合、バージョンを取得
if (strstr($ua, 'trident') || strstr($ua, 'msie')) {
$ret = preg_match_all('/(msie|rv:?)\s?([\d\.]+)/', $ua, $arr, PREG_SET_ORDER);
if($ret != FALSE && count($arr) > 0){
if(is_array($arr[0]) && count($arr[0]) > 2){
return intval($arr[0][2]); // version
}
}
}
return FALSE;
}

<span style="line-height: 1.5;">

 

 

 

EclipseLinkのJPAを使ってViewを参照する時の注意点

最近、EclipseLinkのJPAを使った開発をしていますが、単純なテーブル構造の参照・追加の処理においては便利です。

ただ、ViewをJPAで参照する場合はどのように扱ったらよいか分からなかったので、調べてみました。以下2つのサイトが参考になりました。

JPAでDatabase View?

persistence.xmlには、上記記事内の<property name=”hibernate.hbm2ddl.auto” value=”none”/>でなく、<property name=”eclipselink.ddl-generation” value=”none”/>として設定しました。

またJPA-toolでViewからエンティティを作成した場合は『@Column(insertable=false, updatable=false)』を付与してあげましょう。

 

howto-user-metaslider

WordPress Plugin のMetaSliderはスライド画像を容易に設定できるプラグインです。複数の画像スライドショーを作成、管理できます。残念ながら動画スライドショーはできません。「MasterSlider」プラグインであれば、Youtubeなどの動画コンテンツの埋め込んだスライダーも作成できます。

MetaSliderの場合、表示設定時はPHPに直接埋め込んでもできますし、記事・固定ページへショートコードで入れ込むことも可能です。

続きを読む

GoogleCloudVisionAPIを試してみる

先日(3月19日)行われたGoogleCloudVision APIのハンズオンにてサンプルを作成。

フォルダにある画像をサムネイル表示し、対応するボタン押下でサーバ経由でGoogleCloudVision APIをコールしてくれます。

cloudvisionApi

参考URL

契約しているさくらレンタルスタンダードでは、base64コマンドが入っていなかったので、自サーバにて試してみました。

http://test.zamuu.net/googleCloudVision2018/

追記2016/11

2016/11月現在では、https://cloud.google.com/vision/?hl=ja にサンプル動作確認用のフォームがあります。

追記2018/08

【Android】Cloud Visionのサンプルを動かす』を参考にCloudVisionのサンプルコードがありましたので、実機で動作させたデモ動画を公開します。

 

buddypress のユーザ登録承認・有効化する際のメール本文をカスタマイズする

wordpressのSNS向けプラグインであるbuddypressを運用していて、新たにユーザ登録された際、ユーザに自動的にActivateするためのメールが届くのですが、そのやり方を調査したので、以下メモしておきます。

参考にさせてもらったのは以下3つのサイト。

3つめの海外サイトが一番参考になりました。メール本文を変更したい場合は『bp_core_signup_send_validation_email_message』にfilterをかけます。


add_filter( 'bp_core_signup_send_validation_email_message', 'custom_buddypress_activation_message', 10, 3 );
function custom_buddypress_activation_message( $message, $user_id, $activate_url ) {
$user = get_userdata( $user_id );
$post = get_post([有効化]);
return "$user->user_login
$post->post_content
$activate_url
";
}

$post = get_post([有効化]); という部分は、buddypressの「設定」-「固定」にある、有効化させた際の固定ページのidを指定します。有効化した際の固定ページに記載した文章を入れ、これをメール本文として送付するよう修正しています。

 

オープンデータ活用・香川県三豊市と琴平町のゴミ情報・5374アプリ

2016/03/13(日)に『G7香川・高松情報通信大臣会合関連事業 オープンデータ活用セミナー』にて、 5374.jp のハンズオンがありました。

その一環として三豊市のゴミ無しアプリを作成し公開しました。元々はCode for kanazawaが作成したアプリだそうです。
モバイル対応しているので、各地域に広がって蔵たらいいですね。

Webアプリは以下 から閲覧できます。

三豊市5374アプリ(GitHub)

琴平町5374アプリ(GitHub)

 

wordpress「new-user-approve」プラグインの日本語化

wordpress のプラグイン new-user-approve (ver1.7.3)の日本語化をしましたのでpo/moファイルをこちらに置いておきます。

本プラグインは、新しいユーザ登録時に承認と管理機能をもつプラグインです。

翻訳ファイル:[download id=”12″ format=”2″]

AndroidWearWatchFace アプリイベント

本日、高松で@adakodaさんによるAndriod Watch Face アプリの作成イベントが行われました。

@adakodaさんのサイトは以下でレッスン形式で記載してくれています。

参考URL : http://android-wear-watch-faces-lesson.blogspot.jp/
LESSON1-7 http://android-wear-watch-faces-lesson.blogspot.jp/2015/11/lesson-01.html

adbコマンドのPATHを通す
http://qiita.com/momotas210/items/3488956b8bab72d49498

https://io2015codelabs.appspot.com/codelabs/watchface#1
API18 タブレット側
API21 WearのWatchFace対応がAPI21から