001/*
002 * Copyright 2002-2017 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      https://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package org.springframework.orm;
018
019import org.springframework.dao.DataRetrievalFailureException;
020
021/**
022 * Exception thrown if a mapped object could not be retrieved via its identifier.
023 * Provides information about the persistent class and the identifier.
024 *
025 * @author Juergen Hoeller
026 * @since 13.10.2003
027 */
028@SuppressWarnings("serial")
029public class ObjectRetrievalFailureException extends DataRetrievalFailureException {
030
031        private Object persistentClass;
032
033        private Object identifier;
034
035
036        /**
037         * Create a general ObjectRetrievalFailureException with the given message,
038         * without any information on the affected object.
039         * @param msg the detail message
040         * @param cause the source exception
041         */
042        public ObjectRetrievalFailureException(String msg, Throwable cause) {
043                super(msg, cause);
044        }
045
046        /**
047         * Create a new ObjectRetrievalFailureException for the given object,
048         * with the default "not found" message.
049         * @param persistentClass the persistent class
050         * @param identifier the ID of the object that should have been retrieved
051         */
052        public ObjectRetrievalFailureException(Class<?> persistentClass, Object identifier) {
053                this(persistentClass, identifier,
054                                "Object of class [" + persistentClass.getName() + "] with identifier [" + identifier + "]: not found",
055                                null);
056        }
057
058        /**
059         * Create a new ObjectRetrievalFailureException for the given object,
060         * with the given explicit message and exception.
061         * @param persistentClass the persistent class
062         * @param identifier the ID of the object that should have been retrieved
063         * @param msg the detail message
064         * @param cause the source exception
065         */
066        public ObjectRetrievalFailureException(
067                        Class<?> persistentClass, Object identifier, String msg, Throwable cause) {
068
069                super(msg, cause);
070                this.persistentClass = persistentClass;
071                this.identifier = identifier;
072        }
073
074        /**
075         * Create a new ObjectRetrievalFailureException for the given object,
076         * with the default "not found" message.
077         * @param persistentClassName the name of the persistent class
078         * @param identifier the ID of the object that should have been retrieved
079         */
080        public ObjectRetrievalFailureException(String persistentClassName, Object identifier) {
081                this(persistentClassName, identifier,
082                                "Object of class [" + persistentClassName + "] with identifier [" + identifier + "]: not found",
083                                null);
084        }
085
086        /**
087         * Create a new ObjectRetrievalFailureException for the given object,
088         * with the given explicit message and exception.
089         * @param persistentClassName the name of the persistent class
090         * @param identifier the ID of the object that should have been retrieved
091         * @param msg the detail message
092         * @param cause the source exception
093         */
094        public ObjectRetrievalFailureException(
095                        String persistentClassName, Object identifier, String msg, Throwable cause) {
096
097                super(msg, cause);
098                this.persistentClass = persistentClassName;
099                this.identifier = identifier;
100        }
101
102
103        /**
104         * Return the persistent class of the object that was not found.
105         * If no Class was specified, this method returns null.
106         */
107        public Class<?> getPersistentClass() {
108                return (this.persistentClass instanceof Class ? (Class<?>) this.persistentClass : null);
109        }
110
111        /**
112         * Return the name of the persistent class of the object that was not found.
113         * Will work for both Class objects and String names.
114         */
115        public String getPersistentClassName() {
116                if (this.persistentClass instanceof Class) {
117                        return ((Class<?>) this.persistentClass).getName();
118                }
119                return (this.persistentClass != null ? this.persistentClass.toString() : null);
120        }
121
122        /**
123         * Return the identifier of the object that was not found.
124         */
125        public Object getIdentifier() {
126                return this.identifier;
127        }
128
129}